2017-03-29 81 views
1

我的UI中的用例是基於雙擊JList中的項目來填充兩個JTextField組件。簡單的方法是使用JCheckBox填充jTextField1如果選中該複選框,並填充另一個(如果未選中),反之亦然。基於最新的KeyStroke填充JTextField

但我想探討如果這可以沒有複選框。

如在我輸入jtextfield1中的內容並雙擊列表中的項目以完成文本,基於獲取我使用的最新KeyStroke,單擊的項目應追加到jtextfield1

有沒有辦法做到這一點?

+0

添加'FocusListener'到這兩個領域。聲明一個屬性'lastFocusedTextField'。當任何一個字段獲得焦點時,更新'lastFocusedTextField'屬性以指向它。在列表中的動作中,更新'lastFocusedTextField'。 –

+1

@AndrewThompson感謝您的建議,將嘗試此方法並回複評論。 –

回答

2

我的用戶界面中的用例是基於雙擊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

感謝您的建議,將嘗試此方法並回復。 –

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

謝謝。有效 –