为什么我的JList没有给我java中JList.getSelectedValue()的值?

为什么我的JList没有给我java中JList.getSelectedValue()的值?,java,swing,jlist,Java,Swing,Jlist,我正在为一个朋友的Minecraft服务器制作一个控制台面板。它正在生成一个在线玩家列表,并将其放入一个JList中。以下是所有与JList相关的代码: public class Panel extends JPanel{ private static DefaultListModel listModel = new DefaultListModel(); private static JList list; public void demo(){ setLayout(new Borde

我正在为一个朋友的Minecraft服务器制作一个控制台面板。它正在生成一个在线玩家列表,并将其放入一个JList中。以下是所有与JList相关的代码:

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();
}

}
公共类面板扩展了JPanel{
私有静态DefaultListModel listModel=新DefaultListModel();
私有静态JList列表;
公共空间演示(){
setLayout(新的BorderLayout());
添加(其他类中的按钮命令和面板,BorderLayout.CENTER);
列表=新JList(列表模型);
list.setPreferredSize(新维度(260,this.getHeight());
list.setSelectionMode(ListSelectionModel.SINGLE\u INTERVAL\u SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
添加(新的JScrollPane(列表),BorderLayout.WEST);
}
从名为refreshList的按钮调用公共静态void generateUsers(){//
字符串s=…调用用户列表…(s包含“,”以及用户名)
字符串[]users=s.split(,“”;//仅分隔用户名
for(int i=0;i
因此,为了进行测试,我正在进行所有生成和所有操作,当调用generateUsers()时,JList将加载我所有的用户名。但是当我点击一个按钮调用getSelectedPlayer()时;在System.out.println()中打印的所有内容;是空的。无论我有多少用户,结果都是空的。按钮位于同一窗口中,如上所示


为什么我的输出总是空的?如果调用list.getSelectedIndex(),它将生成-1。怎么了?请帮忙!我可以提供更多的细节!提前谢谢

您在此处重新分配列表变量:

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 **********
}
publicstaticvoidgenerateusers(){//从名为refreshList的按钮调用
字符串s=…调用用户列表…(s包含“,”以及用户名)
字符串[]users=s.split(,“”;//仅分隔用户名
for(int i=0;i
这意味着列表变量对JList的引用与显示的JList不同

解决方案:不要这样做,不要重新分配变量。

此外,这些方法或字段都不应是静态的无。

您在此处重新分配列表变量:

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 **********
}
publicstaticvoidgenerateusers(){//从名为refreshList的按钮调用
字符串s=…调用用户列表…(s包含“,”以及用户名)
字符串[]users=s.split(,“”;//仅分隔用户名
for(int i=0;i
这意味着列表变量对JList的引用与显示的JList不同

解决方案:不要这样做,不要重新分配变量。

此外,这些方法或字段都不应是静态的无。

您在此处重新分配列表变量:

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 **********
}
publicstaticvoidgenerateusers(){//从名为refreshList的按钮调用
字符串s=…调用用户列表…(s包含“,”以及用户名)
字符串[]users=s.split(,“”;//仅分隔用户名
for(int i=0;i
这意味着列表变量对JList的引用与显示的JList不同

解决方案:不要这样做,不要重新分配变量。

此外,这些方法或字段都不应是静态的无。

您在此处重新分配列表变量:

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 **********
}
publicstaticvoidgenerateusers(){//从名为refreshList的按钮调用
字符串s=…调用用户列表…(s包含“,”以及用户名)
字符串[]users=s.split(,“”;//仅分隔用户名
for(int i=0;i
这意味着列表变量对JList的引用与显示的JList不同

解决方案:不要这样做,不要重新分配变量。


此外,这些方法或字段都不应是静态的无。

实例化
list=new JList(listModel)两次。第二次使用
list.setModel(listModel)。这应该行。

您实例化了
list=newjlist(listModel)两次。第二次使用
list.setModel(listModel)。这应该行。

您实例化了
list=newjlist(listModel)两次。第二次使用
list.setModel(listModel)。这应该行。

您实例化了
list=newjlist(listModel)两次。第二次使用
list.setModel(listModel)。那应该行。

好吧,我在外部引用了一些方法,而且这个类没有任何其他迭代,所以为什么它们不能是静态的?@PulsePanda:因为你试图以静态和非静态的方式使用它们。您正在使用OOP语言创建非OOP程序——为什么?如果需要在类之外引用它们,则只能通过类的实例进行引用。这个问题建议您学习Java入门教材。我建议用bruce eckel的Java思考。啊,我明白了。但是,除此之外,真的有逻辑理由不这样做吗?它会导致潜在的错误吗?@PulsePanda:是的,如果你有多个类的实例,你的代码逻辑就会全部出错。不要这样做。静态应该是