2017-03-29 23 views
1

내 UI의 사용 사례는 JList의 항목을 두 번 클릭하여 두 개의 JTextField 구성 요소를 채우는 것입니다. 쉬운 것은 체크 박스가 선택되면 채우기 jTextField1을 사용하고 선택되지 않은 경우 다른 쪽을 채우거나 그 반대의 경우도 완벽하게 작동하는 것입니다.최신 KeyStroke를 기반으로 JTextField 채우기

그러나이 확인란을 선택하지 않으면 탐색 할 수 있습니다.

마찬가지로, 내가 jtextfield1에 무엇인가 입력하고 목록의 항목을 더블 클릭하면, 내가 사용한 가장 최근의 KeyStroke을 가져와 jtextfield1에 추가 된 항목을 추가해야합니다.

이렇게 할 방법이 있습니까?

+0

이 두 필드에'FocusListener' 추가 :의 MouseListener에서

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"; } }); 

이는 경우 - 다른 후 추가합니다. 'lastFocusedTextField' 속성을 선언하십시오. 두 필드 중 하나에서 포커스를 얻었 으면'lastFocusedTextField' 속성을 업데이트하여 가리 키도록합니다. 목록에서 작업 할 때'lastFocusedTextField'를 업데이트하십시오. –

+1

@AndrewThompson이 제안에 감사 드리며이 방법을 시도하고 의견을 다시 말합니다. –

답변

2

내 UI의 사용 사례는 jlist의 항목을 두 번 클릭하여 두 개의 jTextField를 채우는 것입니다.

일반적으로 UI는 마우스 또는 키보드를 사용하여 액션을 호출 할 수 있도록 설계되어야합니다. 즉, 두 번 클릭하거나 선택한 항목에서 Enter 키를 사용할 수 있어야합니다.

Action을 사용하여이 기능을 구현할 수있는 간단한 클래스에 대해 List Action을 확인하십시오.

이제 Action을 만들 때 TextAction을 확장 할 수 있습니다. 그런 다음 TextActiongetFocustComponent() 메서드를 사용하여 마지막으로 포커스가있는 텍스트 구성 요소를 확인하고 선택한 항목의 텍스트를 해당 텍스트 필드에 추가 할 수 있습니다.

사용자 정의 Action의 기본 코드는 다음과 같습니다

JList list = (JList)e.getSource(); 
JTextComponent textField = getFocusedComponent(); 
textField.setText(list.getSelectedValue().toString()); 

참고 : 당신은 당신의 창을 두 개 이상의 텍스트 구성 요소를 포함하는 경우 초점은 두 개의 필드 중 하나에 있는지 확인해야합니다. 그런 다음

private JTextField lastFocusedTextField = null; 

를 클래스의 생성자에서 사용자가 텍스트 필드를 만들 위치를 청취자 만들 것입니다 :

당신이 당신의 클래스 인스턴스 변수를 정의해야 할 것 된 FocusListener 방법을 사용하려면
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 

이제 MouseListenerJList에 추가해야합니다. 그래서 당신이 필요로하는

JList list = (JList)e.getSource(); 
lastFocusedTextField.setText(list.getSelectedValue().toString()); 

: 다음 mouseClicked(...) 방법은 당신이 뭔가를 할

  1. 변수 인스턴스
  2. 의 FocusListener
  3. 의 MouseListener
+0

제안에 감사 드리며이 방법을 시도하고 의견을 다시 남깁니다. –

0

모두가 제안함에 따라 초기화를 두 텍스트 필드 모두에 FocusListener를 지정하고 둘 중 하나가 초점을 잃은.

코드 :

if ("jTextField1".equals(LastFocusLost)) 
{ 
    //; 
} 

else if ("jTextField2".equals(LastFocusLost)) 
{ 
    //; 
} 
+0

고맙습니다. 효과가있다. –