基于最新的KeyStroke填充JTextField
我的UI中的用例是基于双击JList
中的项目来填充两个JTextField
组件。简单的方法是使用JCheckBox
填充jTextField1
如果选中该复选框,并填充另一个(如果未选中),反之亦然。基于最新的KeyStroke填充JTextField
但我想探讨如果这可以没有复选框。
如在我输入jtextfield1
中的内容并双击列表中的项目以完成文本,基于获取我使用的最新KeyStroke
,单击的项目应追加到jtextfield1
。
有没有办法做到这一点?
我的用户界面中的用例是基于双击jlist中的项目来填充两个jTextField。
那么,通常应该设计一个UI,以便您可以使用鼠标或键盘来调用一个Action。那就是你应该能够双击或使用所选项目上的Enter键。
检出List Action为简单的类,允许您通过使用Action
实现此功能。
现在,当您创建Action
时,您可以扩展TextAction
。然后,您可以使用TextAction
中的getFocustComponent()
方法确定最后有焦点的文本组件,并将选定项目中的文本添加到该文本字段。
自定义Action
的基本代码将是:
JList list = (JList)e.getSource();
JTextComponent textField = getFocusedComponent();
textField.setText(list.getSelectedValue().toString());
注意:您需要验证,如果重点是在这两个领域中的一个,如果你的窗口包含两个以上的文本组件。
要使用的FocusListener方法,你需要在你的类定义一个实例变量:
private JTextField lastFocusedTextField = null;
然后在类的构造函数,你创建的文本字段您将创建监听器:
FocusListener fl = new FocusAdapter()
{
@Override
public void focusGained(FocusEvent e)
{
lastFocusedTextField = (JTextField)e.getSource();
}
};
JTextField textField1 = new JTextField(...);
textField1.addFocusListener(fl);
// same for the other text field
现在您需要将MouseListener
添加到JList
。在mouseClicked(...)
方法你做这样的事情:
JList list = (JList)e.getSource();
lastFocusedTextField.setText(list.getSelectedValue().toString());
因此,你需要:
- 一个实例变量
- 一个的FocusListener
- 一个MouseListener的
感谢您的建议,将尝试此方法并回复。 –
因为每个人都有建议的初始化一个FocusListener同时指向两个文本字段,另一个指向一个字符串变量失去了重点。
代码:
String LastFocusLost = null;
jTextField1.addFocusListener(new java.awt.event.FocusAdapter()
{
public void focusLost(java.awt.event.FocusEvent evt)
{
LastFocusLost = "jTextField1";
}
});
jTextField2.addFocusListener(new java.awt.event.FocusAdapter()
{
public void focusLost(java.awt.event.FocusEvent evt)
{
LastFocusLost = "jTextField2";
}
});
在的MouseListener添加的if-else则:
if ("jTextField1".equals(LastFocusLost))
{
//;
}
else if ("jTextField2".equals(LastFocusLost))
{
//;
}
谢谢。有效 –
添加'FocusListener'到这两个领域。声明一个属性'lastFocusedTextField'。当任何一个字段获得焦点时,更新'lastFocusedTextField'属性以指向它。在列表中的动作中,更新'lastFocusedTextField'。 –
@AndrewThompson感谢您的建议,将尝试此方法并回复评论。 –