2014-01-17 1 views
0

친구를 위해 Minecraft Server 용 콘솔 패널을 만들고 있습니다. 온라인 플레이어 목록을 생성하여 JList에 저장합니다. 여기의 JList와 모든 관련된 모든 코드입니다 : 내 JList가 java에서 jlist.getSelectedValue()에 대한 값을 제공하지 않는 이유는 무엇입니까?

public class Panel extends JPanel{ 
private static DefaultListModel listModel = new DefaultListModel(); 
private static JList list; 

public void demo(){ 
    setLayout(new BorderLayout()); 
    add(buttonCommandPanelInAnotherClass, BorderLayout.CENTER); 

    list = new JList(listModel); 
    list.setPreferredSize(new Dimension(260, this.getHeight())); 

    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
    list.setLayoutOrientation(JList.VERTICAL); 

    add(new JScrollPane(list), BorderLayout.WEST); 
} 

public static void generateUsers(){ //called from a button called refreshList 
    String s = ... call for the user list ... (s contains ', ' as well as the usernames) 

    String[] users = s.split(", "); // to seperate only the usernames 

    for(int i = 0; i < users.length; i++){ 
     listModel.addElement(users[i]); 
    } 

    list = new JList(listModel); 
} 

public String getSelectedPlayer(){ //called when i push a command button, such as ban. 
    return (String) list.getSelectedValue(); 
} 

} 

그래서 테스트를 위해, 나는 모든 세대와 모든 것을하고있어

하고 generateUsers()가 호출 될 때, JList의는 모두와 함께로드됩니다 내 사용자 이름. 하지만 버튼을 클릭하여 getSelectedPlayer(); 모두 System.out.println()에 인쇄됩니다. null 얼마나 많은 사용자가 있더라도 결과는 null입니다. 위에 표시된 것과 같이 단추가 동일한 창에 있습니다.

내 출력이 항상 null입니까? list.getSelectedIndex()를 호출하면 -1이 생성됩니다. 뭐가 문제 야? 도와주세요! 나는 더 자세한 내용을 줄 수있어! 미리 감사드립니다!

답변

1

list = new JList(listModel);을 두 번 인스턴스화합니다. 두 번째로 list.setModel(listModel);을 사용하십시오. 그 소리 작업.

+0

실제로 솔루션을 포함 해 주셔서 감사합니다. 매력처럼 일했다 :) – PulsePanda

+0

문제 남자 (: –

2

는 현재 목록 변수를 다시 지정 :

public static void generateUsers(){ //called from a button called refreshList 
    String s = ... call for the user list ... (s contains ', ' as well as the usernames) 

    String[] users = s.split(", "); // to seperate only the usernames 

    for(int i = 0; i < users.length; i++){ 
     listModel.addElement(users[i]); 
    } 

    list = new JList(listModel); // ******** here ********** 
} 

목록 변수에 의해 JList의 참조가 표시 JList의 동일하지 않습니다 것을 의미합니다.

해결책 :이 작업을 수행하지 말고 변수를 다시 할당하지 마십시오.
또한 이러한 방법이나 필드는 정적이 아니어야합니다. 없음.

+1

+1 OP의 코드를 다시 작성하지 말아야한다는 것을 알았습니다 : P – MadProgrammer

+0

글쎄, 저는이 방법의 일부를 외부 적으로 참조하고 있으며,이 클래스의 다른 반복을 전혀하지 않습니다. ? – PulsePanda

+0

@PulsePanda : 정적 및 비 정적 방식으로 사용하기 때문에. OOP 언어를 사용하는 비 OOP 프로그램을 만들고 있습니다 - 왜 그런가요? 수업 외부에서 수업을 참조해야하는 경우 수업의 사례를 통해서만 수행해야합니다. 이 질문은 자바 교과서 소개를 배우기를 원할 것입니다. 나는 ** Thinking in Java **를 bruce eckel에 의해 제안한다. –