2013-08-29 1 views
1

등록 페이지를 만들고 있지만 자바에 대한 새로운 지식이 있습니다. "Mr, Mrs, Miss, etc."와 같은 사람들 제목의 콤보 상자가 있습니다. 옵션은 "기타 ..."입니다. 제목을 지정하는 콤보 상자 옆에 텍스트 필드가 있습니다. 콤보 상자에서 "기타 ..."를 선택하지 않으면 텍스트 필드를 편집 할 수 없습니다. 나는 이것을한다?배열의 변수에 따라 레이블을 편집 할 수있게 만들기

현재 보이는 모습 : 내가 잘못하고있는 것을 볼 수 없습니까?

TitleSpecifyChoiceField.setEditable(false); 
    TitleSpecifyChoiceField.setText("Please specify title..."); 


    TitleChoice.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Mr", "Mrs", "Miss", "Ms", "Dr", "Other..." })); 
    TitleChoice.setToolTipText(""); 
    TitleChoice.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent e) { 


if (TitleChoice.getSelectedItem().equals("Other...")){ 
TitleSpecifyChoiceField.setEditable(true); 
    }; 
+0

을 : // www.sscce.org)를 사용해 보았습니다. 그러면 더 나은 답변을 얻을 수 있습니다! – nachokk

답변

3

Swing combo box tutorial에 따라 JComboBox에 리스너를 추가하여 JComboBox의 모든 변경 사항에 응답하는 것과 같은 방법으로 수행 할 수 있습니다. 청취자 내부에서 선택한 항목에 따라 JTextField의 setEnabled(...) 설정을 변경하십시오. 즉, JComboBox에서 getSelectedItem()을 호출하고 equalsIgnoreCase("other")이 true인지 테스트합니다.

setEditable(...)이 아닌 것은 사용자가 시각적으로 JTextField를 편집해야하는지 여부를 시각적으로 알려주기 때문에 setEnabled(...)이 아닌 것을 사용하는 것이 좋습니다.

TitleSpecifyChoiceField.setEditable(false); 
TitleSpecifyChoiceField.setText("Please specify title..."); 

TitleChoice.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Mr", "Mrs", "Miss", "Ms", "Dr", "Other..." })); 
TitleChoice.setToolTipText(""); 
TitleChoice.addItemListener(new ItemListener(){ 
    public void itemStateChanged(ItemEvent e) { 
    if (TitleChoice.getSelectedItem().equals("Other...")){ 
     TitleSpecifyChoiceField.setEditable(true); 
    } 
    } 
}); 

일부 문제와 문제 : 코드에 대해서는


편집

  • 이 JComboBox에 사용 문자열을합니까하거나 다른 종류의 항목을 유지합니까?
  • 코드에 디버깅 코드를 추가하여 문제를 격리하려고합니다. 예를 들어, ItemListener 내부에 System.out.println(...)을 추가하여 선택한 항목을 인쇄하여 리스너가 예상대로 작동하는지 확인합니다.
  • .equals("Other...") 문자열 리터럴인지 확인하고 있습니다. 그 대신 JComboBox가 사용하는 String 상수, OTHER를 작성하고 리스너에서 테스트하여 테스트 된 String 및 표시된 값이 같은지 확인하십시오.
  • 다시 setEnabled(...)이 아닌 setEditable(...)을 사용하는 것이 좋습니다.
  • 소문자로 시작하는 모든 변수 이름을 포함하여 Java 명명 규칙을 배우고 따라야합니다. 그러면 코드를 더 잘 이해하는 데 도움이됩니다.
  • 게시 된 코드 들여 쓰기를 수정하여 규칙적이고 이해할 수 있도록해야합니다 (위 코드를 참조하십시오). 왜 당신이 당신의 코드를 이해하도록 돕고 자하는 사람들을 위해 더 열심히하고 싶습니까? 당신의 일은 우리 모두가 자원 봉사자 인 것처럼 우리를 가능한 한 쉽게 만드는 것입니다.
  • 가장 빠르고 가장 빠른 도움말을 얻으려면 sscce을 작성하여 게시하십시오. setEditable 반대로 당신은 (@HovercraftFullOfEels 제안 등) ItemListener 당신의 JComboBox에와 추가 시도 할 수
+0

미안해 내가 XD 신제품을 연주 한 것 같아 청취자 란 무엇이며 어떻게 구현할 수 있는지 설명해 주시겠습니까? 고마워요 :) – LiamVanV

+0

@ LiamVanV : 제가 배울 수있는 많은 튜토리얼로 이동해야합니다. 튜토리얼에서 모두 설명합니다. –

+0

오케이 :) 고맙습니다. – LiamVanV

0

콤보 상자에 수신기를 추가하십시오. 선택한 항목이 변경되면 텍스트 필드에서 setEditable()으로 전화하십시오.

+0

적어도 "listener"라고 말하는 대신 ItemListener가 필요하다고 지정할 수 있습니다. –

0

setEnabled를 사용합니다.

JTextField textField = ...; 
    JComboBox<String> comboBox = ...; 
    comboBox.addItemListener(
      new ItemListener(){ 
       public void itemStateChanged(ItemEvent e){ 
        final String selected = (String)comboBox.getSelectedItem(); 
        textField.setEnabled(selected.equals("other")); 
       } 
      } 
    ); 

을 아니면 자바 (8)을 사용하는 경우이 사용할 수 있습니다 : 일반적인 생각 들어, 당신이 뭔가를 할 수 있습니다 더 나은 도움이 포스트를 들어 [SSCCE] (HTTP를

JTextField textField = ...; 
    JComboBox<String> comboBox = ...; 
    comboBox.addItemListener(
      e -> { 
       final String selected = (String)comboBox.getSelectedItem(); 
       textField.setEnabled(selected.equals("other")); 
      } 
    ); 
+0

예제를 보니 고맙습니다. 꽤 도움이되었습니다 :) – LiamVanV

관련 문제