📜  Java Swing-JList(1)

📅  最后修改于: 2023-12-03 15:01:32.537000             🧑  作者: Mango

Java Swing-JList

Java Swing-JList 是一种可在 Java Swing 应用程序中使用的列表组件。它可以用于显示和选择一个或多个元素。JList 中的元素可以是任何对象,包括字符串、图像或自定义对象。

JList 的常用属性
  • model:保存 JList 中显示的元素的数据模型
  • selectionModel:保存当前选择的元素的模型
  • visibleRowCount:设置可见行的数量
  • selectionBackground:设置选中元素的背景颜色
  • selectionForeground:设置选中元素的前景颜色
JList 的使用

下面是一个简单的 JList 使用示例:

import javax.swing.*;

public class JListDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JList Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String[] data = {"Apple", "Banana", "Grape", "Orange"};
        JList<String> list = new JList<>(data);
        JScrollPane scrollPane = new JScrollPane(list);

        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

在这个示例中,我们创建了一个包含四个元素的字符串数组。然后,我们创建了一个 JList,并将数据数组传递给它。最后,我们将 JList 放到一个 JScrollPane 中,并将 JScrollPane 添加到 JFrame。运行代码后,可以看到一个包含四个元素的 JList。

JList 的自定义元素

除了使用字符串作为元素,JList 还可以显示任何类型的对象。要显示自定义元素,可以创建一个继承自 DefaultListModel 类的自定义数据模型。该模型将负责将自定义对象转换为字符串,并将它们添加到 JList 中。

下面是一个自定义对象的实例:

public class Fruit {
    private String name;
    private String color;

    public Fruit(String name, String color) {
        this.name = name;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public String getColor() {
        return color;
    }

    @Override
    public String toString() {
        return name + " (" + color + ")";
    }
}

该类有两个属性—— name 和 color,并且有一个 toString() 方法,以将 Fruit 对象转换为字符串。

下面是一个使用自定义对象的 JList 示例:

import javax.swing.*;

public class JListDemo2 {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JList Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DefaultListModel<Fruit> model = new DefaultListModel<>();
        model.addElement(new Fruit("Apple", "Red"));
        model.addElement(new Fruit("Banana", "Yellow"));
        model.addElement(new Fruit("Grape", "Purple"));
        model.addElement(new Fruit("Orange", "Orange"));

        JList<Fruit> list = new JList<>(model);
        list.setCellRenderer(new FruitRenderer());
        JScrollPane scrollPane = new JScrollPane(list);

        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }

    static class FruitRenderer extends JLabel implements ListCellRenderer<Fruit> {
        public FruitRenderer() {
            setOpaque(true);
        }

        @Override
        public Component getListCellRendererComponent(JList<? extends Fruit> list, Fruit fruit, int index, boolean isSelected, boolean cellHasFocus) {
            setText(fruit.toString());
            setBackground(isSelected ? Color.BLUE : Color.WHITE);
            setForeground(isSelected ? Color.WHITE : Color.BLACK);
            return this;
        }
    }
}

我们创建了一个 DefaultListModel,将 Fruit 对象添加到列表中。我们还创建了一个 FruitRenderer 类,以将自定义对象转换为字符串,并为选中和未选中的元素设置不同的颜色。最后,我们将 FruitRenderer 设置为 JList 的 cell renderer,并将 JList 放在 JScrollPane 中。

这里我们自定义了一个渲染器 FruitRenderer,设置了选中元素和未选中元素的颜色,以显示一些自定义的样式。

总结

在本文中,我们介绍了如何使用 JList 组件在 Java Swing 应用程序中显示和选择列表元素。我们学习了 JList 的常用属性和如何自定义元素。我们还通过示例演示了如何使用自定义数据和自定义渲染器。