2012-10-01 8 views
0

jList에서 입력을 받아야하는 jTextfield가 있습니다. FocusGained 속성에서 jList는 jTextfield 바로 아래에 나타나야하며 jList는 FocusLost 속성에서 사라져야합니다. 코딩을 해봤지만 문제가 있습니다. FocusGained 속성에서 jList가 나타 났으 나 그것을 클릭하면 이전 텍스트 필드 아래에있는 다른 jTextfield의 뒷면으로 이동합니다.jList의 입력이있는 jTextfield

private void txtAccountFocusGained(java.awt.event.FocusEvent evt) {          
    jScrollPane3.setLocation(txtAccount.getX(), txtAccount.getY()+txtAccount.getHeight()); 
    jScrollPane3.setVisible(true); //scrollpane associated with list 
    listAccount.setVisible(true); //listAccount is jList 
} 

private void listAccountMouseClicked(java.awt.event.MouseEvent evt) {           
    txtAccount.setText((String)listAccount.getSelectedValue()); 
    jScrollPane3.setVisible(false); //scrollpane associated with list 
    txtSalesLedger.requestFocus(); //it is next field 
} 
+3

문제가 있거나/도움이 필요하다고 생각되는 코드를 제공하십시오. – devrys

+2

foir 더 나은 도움 빨리 [SSCCE] (http://sscce.org/) – mKorbel

+0

나는 새로운 사용자이기 때문에 이미지를 추가 할 수 없습니다. –

답변

1

대신 JTextFieldJComboBox을 사용하여 다음 내 코드입니다. JComboBox.setEditable(true)으로 전화를 걸면 JComboBox에는 JTextField이라는 편집기가 있습니다. 정확히 원하는 것, 그리고 사용자가 텍스트를 입력 할 수 있지만 목록 상자는 화살표 아이콘으로 열 수 있습니다. 또한 JComboBox.showPopup()을 호출하여 목록을 자동으로 표시 할 수 있습니다. JComboBox의 에디터 텍스트 필드에 포커스 리스너를 추가하면 사용자가 텍스트 필드를 클릭 할 때 팝업을 표시 할 수도 있습니다. 팝업 목록은 화살표 아이콘으로 닫을 수 있습니다.

final JComboBox comboBox = new JComboBox( 
    new Object[] { "", "Item #1", "Another item", "Something else" }); 

comboBox.setEditable(true); 

comboBox.getEditor().getEditorComponent().addFocusListener(new FocusAdapter() { 
    @Override 
    public void focusGained(final FocusEvent event) { 
     comboBox.showPopup(); 
    } 
}); 

참고 : 콤보 상자의 첫 번째 항목이 빈 문자열

다음은 샘플 코드입니다. 콤보 상자의 편집기 텍스트 필드에 처음에는 값이 표시되지 않도록 추가했습니다. 물론 초기 값을 원하면 제거 할 수 있습니다.

+1

해킹을 사용하지 마십시오 (빈 문자열처럼) : 대신 모델의 selectedItem을 null로 설정하십시오. – kleopatra

+0

빈 문자열은 다른 항목을 선택하지 않기위한 해킹이 아닙니다. 항목에서 아무 것도 선택하지 않을 수도 있습니다 (목록에서 수동으로 필드를 지우지 않아도 됨). – icza

+0

더 나은 사용자 환경은 지역화 된 <아무 것도 선택하지 않음> – kleopatra