基于最新的KeyStroke填充JTextField

问题描述:

我的UI中的用例是基于双击JList中的项目来填充两个JTextField组件。简单的方法是使用JCheckBox填充jTextField1如果选中该复选框,并填充另一个(如果未选中),反之亦然。基于最新的KeyStroke填充JTextField

但我想探讨如果这可以没有复选框。

如在我输入jtextfield1中的内容并双击列表中的项目以完成文本,基于获取我使用的最新KeyStroke,单击的项目应追加到jtextfield1

有没有办法做到这一点?

+0

添加'FocusListener'到这两个领域。声明一个属性'lastFocusedTextField'。当任何一个字段获得焦点时,更新'lastFocusedTextField'属性以指向它。在列表中的动作中,更新'lastFocusedTextField'。 –

+1

@AndrewThompson感谢您的建议,将尝试此方法并回复评论。 –

我的用户界面中的用例是基于双击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()); 

因此,你需要:

  1. 一个实例变量
  2. 一个的FocusListener
  3. 一个MouseListener的
+0

感谢您的建议,将尝试此方法并回复。 –

因为每个人都有建议的初始化一个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)) 
{ 
    //; 
} 
+0

谢谢。有效 –