Java JList 不显示元素

标签 java swing jlist display

我有一个 JList,它应该显示学校测试列表。当我在 Swing Designer 中向此列表添加值时,它会正确显示所有内容,但当我尝试显示自己的数据时,它仍然显示在 Swing Designer 中初始化的值。如何在JList中显示我自己的一组数据?我在代码中的初始更新:

    public void updateFrame(MainFrame mainFrame)
{
    DefaultListModel<Test> listModel = new DefaultListModel<Test>();
    for(int i = 0 ; i < this.getTestList().size() ; i++)
        listModel.add(i, this.getTestList().get(i));
    JList<Test> currList = new JList<>(listModel);      
    currList.setVisible(true);
    mainFrame.setList(currList);
    mainFrame.getList().setVisible(true);
}

此外,我的 ListListener 不会随时激活,但这是另一个问题,也许在第一个问题之后更容易弄清楚。

class ListListener implements ListSelectionListener {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        DefaultListModel<Test> listModel = new DefaultListModel<Test>();
        for(Test test : model.getTestList())
            listModel.addElement(test);
        JList<Test> currList = new JList<Test>(listModel);
        mainFrame.setList(currList);
    }
}

最佳答案

再次强调,不要交换组件,而是交换模型,例如:

public void updateFrame(MainFrame mainFrame) {
    DefaultListModel<Test> listModel = new DefaultListModel<Test>();
    for(int i = 0 ; i < this.getTestList().size() ; i++) {
        listModel.add(i, this.getTestList().get(i));
    }

    // ***** get rid of this *****
    // JList<Test> currList = new JList<>(listModel);      
    // currList.setVisible(true);
    // mainFrame.setList(currList);

    // ***** and instead simply do this *****
    mainFrame.getList().setModel(listModel);
}

如果这不起作用,那么可以,创建并发布您的 MCVE

关于Java JList 不显示元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682773/

相关文章:

java - Java中的整数到字节的转换

java - 无法构造 java.util.Collection xstream

java - 处理 Swing 中溢出的组件

java - KeyListener/KeyBinding 不一致触发

java - 如何在一个 JScrollPane 中显示多个可选择的图像?

java - 根据最新的 KeyStroke 填充 JTextField

java - 使用 java.sql.Time 对象对 DefaultListModel 进行排序

Java获取main所在java文件的dir路径

java - UISpec4J - AbstractMethodError(UISpecToolkit.createKeyboardFocusManagerPeer)

java - 为通用集合编写 contains()