我的UI中的用例是基於雙擊JList
中的項目來填充兩個JTextField
組件。簡單的方法是使用JCheckBox
填充jTextField1
如果選中該複選框,並填充另一個(如果未選中),反之亦然。基於最新的KeyStroke填充JTextField
但我想探討如果這可以沒有複選框。
如在我輸入jtextfield1
中的內容並雙擊列表中的項目以完成文本,基於獲取我使用的最新KeyStroke
,單擊的項目應追加到jtextfield1
。
有沒有辦法做到這一點?
我的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同時指向兩個文本字段,另一個指向一個字符串變量失去了重點。
代碼:
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感謝您的建議,將嘗試此方法並回複評論。 –