2013-09-05 2 views
0

여기에 이미지 설명을 입력하십시오. 저는 새로운 프로그래머이고 드롭 다운 상자 (선택 사항)를 입력 장치로 사용하는 텍스트 모험을하고 있습니다. 추가 할 수있는 멤버가있는 두 번째 멤버를 채우는 첫 번째 상자에 itemListener가 있습니다. 플레이어는 제출 버튼을 클릭 할 수 있으며 첫 번째 상자는 목록의 첫 번째 항목으로 재설정되고 두 번째 상자는 지워집니다. 프로그램을 실행할 때 계획대로 정확히 반응합니다. 두 번째로 드롭 다운 상자를 사용하여 입력하려고하면 드롭 다운 상자가 응답하지 않습니다. itemListener 안에 마커를 넣어 트리거가 아닌지 확인합니다. 나는 상상할 수있는 모든 방법으로 프로그램을 tweeked 것처럼 느낀다. 그러나 나는이 문제의 원인을 전혀 모른다. 드롭 다운 상자의 항목을 몇 번 토글하면 itemListener가 다시 응답하기 시작합니다.왜 내 itemlistener가 항상 트리거하지 않습니까?

이것은 내가 던진 내 문제를 표현한 것입니다.

import java.awt.Choice; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextPane; 


public class gui implements ActionListener 
{ 
private static JTextPane outputField = new JTextPane(); 
private static JPanel mainPanel = new JPanel(new GridBagLayout()); 
private Choice commandDropDown = new Choice(); 
private Choice itemDropDown = new Choice(); 
private JButton submitButton = new JButton(); 

public gui() 
{ 
    JFrame frame = new JFrame("test"); 
    mainPanel.setSize(450,585); 

    commandDropDown = buildCommandBox(commandDropDown); 
    commandDropDown.setBounds(100, 15, 100, 40); 
    itemDropDown.setBounds(200, 15, 100, 40); 
    submitButton.setText("submit"); 
    submitButton.setBounds(15, 15, 100, 40); 
    submitButton.addActionListener(this); 
    frame.add(commandDropDown); 
    frame.add(itemDropDown); 
    frame.add(submitButton); 
       frame.setResizable(false); 
     frame.pack(); 
     frame.setSize(300, 300); 
     //frame.setLayout(null); 
     //frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

} 
public void actionPerformed(ActionEvent e) 
{ 
    itemDropDown.removeAll(); 
    commandDropDown.select(0); 
} 

private Choice buildCommandBox(Choice custoChoi) 
{ 
    final Choice c = new Choice(); 

    c.addItem("choices"); 
    c.addItem("Option1"); 
    c.addItemListener(new ItemListener() 
      {     
       public void itemStateChanged(ItemEvent ie) 
       { 
        System.out.println("the action event for the command" 
          + "box is working."); 
        if(c.getSelectedItem().equals("Option1")) 
        { 
         itemDropDown.addItem("things"); 
         itemDropDown.addItem("stuff"); 
        } 
       } 
      }); 

    return c; 
} 
} 

이 사진들이 내 게시물에 대한 혼란을 없애기를 바랍니다. 제 생각에는 http://imgur.com/a/h9oOX#0

+0

더 많은 코드 또는 자세한 내용을 알려주십시오. – Khinsu

+0

알겠습니다. 더 유용한 정보를 제공해 드리겠습니다. 내가 무슨 일이 일어날 거라고 생각 해요 itemListener 드롭 다운 상자의 상태를 변경할 때마다 트리거해야하지만 어떤 이유로 그것을하지 않습니다. 이것은 commandDropDown을 선택할 때마다 System.out.println이 표시되지 않는다는 점에서 분명합니다. 이 정보가 귀하가 찾고자하는 정보가 아닌 경우 사과 드리며 다른 정보가 귀하에게 유용 할 지 모르겠습니다. – Sharpx

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

0

, 당신의 buildCommandBox(Choice custoChoi) 잘못, 그것은 그런 일해야한다 :

private Choice buildCommandBox(final Choice custoChoi) { 

    custoChoi.addItem("choices"); 
    custoChoi.addItem("Option1"); 
    custoChoi.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent ie) { 
      System.out.println("the action event for the command" + "box is working."); 
      if (custoChoi.getSelectedItem().equals("Option1")) { 
       itemDropDown.addItem("things"); 
       itemDropDown.addItem("stuff"); 
      } 
     } 
    }); 

    return custoChoi; 
} 

내가 Swing이 허용되는 경우, ChoiceJComboBox 순간을 사용하는 운영자 추천합니다.

+0

JComboBox로 바꿨을 때 작동하는 것 같습니다. JComboBox의 특성을 찾아야 할 것입니다. 그러나 지금까지는 이미 결과가 마음에 들었습니다. 도와 주셔서 정말 감사합니다! – Sharpx

관련 문제