0

我的 JScrollPane 没有正确更新。

    public static JScrollPane scrollPane;
public static List<String> usernames = new ArrayList<String>();
public static JList list;

    public static void getUsername() {
    usernames.add(Frame.username);
    list = new JList(usernames.toArray());
    scrollPane = new JScrollPane(list);

    // Update
    scrollPane.revalidate();
    list.revalidate();
    panel.revalidate();

    frame.repaint();
    System.out.println("user connected");
}

我已经在滚动窗格、jlist、面板上尝试了 repaint()、revalidate() 和 validate(),但框架和滚动窗格不会更新。如果我用数组中的新数据添加一个新的滚动窗格,它会更新得很好。

        server.addListener(new Listener() {
        public void received(Connection connection, Object object) {
            new Run();
            players++;
            playerLabel.setText("Players currently online: " + players);
            getUsername();
        }
    });
4

2 回答 2

1

当您在列表中添加新内容时,请尝试使用

yourList.setListData(newData);

并将列表添加到滚动窗格

更新:

DefaultListModel<String> model;

private void UpdateJList(){
    model = new DefaultListModel<String>();
    for(Users u : list){
         model.addElement(u.ToString());
    }    
    theJList.setModel(model);     
    theJList.setSelectedIndex(0); // this will mark the first row (item) on the list
}
于 2013-04-10T12:52:59.900 回答
0

谢啦!真的很感激 :) 顺便说一句,对于任何需要它的人来说,这里是我针对我的具体情况的代码:

    public static void getUsername() {
    usernames.add(Frame.username);
    model = new DefaultListModel();
    model.addElement(usernames.toString());
    list.setModel(model);
    list.setSelectedIndex(0);
}
于 2013-04-10T16:33:22.163 回答