2014-01-17 37 views
0

我正在爲朋友製作Minecraft服務器的控制檯面板。它正在生成在線玩家列表,並將其放入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?如果我調用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程序 - 爲什麼?如果你需要在課堂之外引用它們,這隻能通過課堂實例來完成。這個問題表明你會想研究Java教科書的入門。我建議**布魯斯·埃克爾在Java中思考**。 –

相關問題