如何在java swing中将对象列表显示为JList?

How to display a list of objects as a JList in java swing?

提问人:rainbow 提问时间:4/6/2023 最后编辑:Ben the Coderrainbow 更新时间:4/8/2023 访问量:624

问:

我们被要求在 Java Swing 中构建一个系统,没有拖放,我无法理解如何在 . 我有一个 GUI 类,它创建了一个 JFrame、JPanel 和一个空的 JList,以及一个带有对象列表的逻辑类,可以通过 . 我需要通过字段创建更多学生对象,并将它们显示在我的 JList 中并添加到现有的(类型为 )。 我应该将我的作为对象类型声明吗?我找不到有关如何将 JList 与对象列表连接的信息。 我唯一的想法是从输入字段数据创建新的 Student 对象并将其传递给 .但是如何在 GUI 中也将其显示为 JList?JListlogic.studentsListstudentsListArrayList<Students>JListJListStudentslogic.stundentsList

Java Swing 对象 arraylist jlist

评论

1赞 Gilbert Le Blanc 4/7/2023
为什么是 ?为什么不是 ,它旨在显示行和列的表?如果您坚持使用 ,则创建一个 以显示一个且仅显示一个 Student,并将该 Student 的多个实例放在 .JListJTableJListJPanelJPanelJList
0赞 Ben the Coder 4/7/2023
请参阅如何提问

答:

3赞 SaidTheHypocrite 4/7/2023 #1
  1. 创建要显示的对象列表。
  2. 创建一个 DefaultListModel 对象以将对象存储在列表中。
  3. 创建一个 JList 对象并将其模型设置为 DefaultListModel。
  4. 将 JList 添加到 JScrollPane 以允许滚动(如果列表是 长。
  5. 将 JScrollPane 添加到容器(如 JFrame 或 JPanel)中,以 显示 JList。
public class Example extends JFrame {
    
    public Example() {
        // Create a list of strings
        List<String> items = new ArrayList<>();
        items.add("Item 1");
        items.add("Item 2");
        items.add("Item 3");
        
        // Create a DefaultListModel to store the strings
        DefaultListModel<String> listModel = new DefaultListModel<>();
        for (String item : items) {
            listModel.addElement(item);
        }
        
        // Create a JList and set its model to the DefaultListModel
        JList<String> jList = new JList<>(listModel);
        
        // Add the JList to a JScrollPane to allow for scrolling
        JScrollPane scrollPane = new JScrollPane(jList);
        
        // Add the JScrollPane to a container such as a JFrame or JPanel
        JPanel panel = new JPanel();
        panel.add(scrollPane);
        add(panel);
        
        // Set the JFrame properties
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Example");
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
}