JScrollPane未正确更新

时间:2013-04-10 12:46:29

标签: java swing jscrollpane

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

    public static void getUsername() {
    usernames.add(Frame.username);
    model = new DefaultListModel();
    model.addElement(usernames.toString());
    list.setModel(model);
    list.setSelectedIndex(0);
}