📜  Swing示例-列表(1)

📅  最后修改于: 2023-12-03 14:47:48.444000             🧑  作者: Mango

Swing示例-列表

在Swing中,JList是一个非常常用的组件,它允许用户从一个列表中选择一个或多个项目。本文将介绍如何创建和使用JList。

创建JList

创建一个JList需要两个参数:列表数据和单元格渲染器。列表数据是JList中显示的项目集合,单元格渲染器描述了如何呈现每个单元格。

String[] data = {"Item 1", "Item 2", "Item 3"};
JList<String> list = new JList<>(data);
list.setCellRenderer(new DefaultListCellRenderer());

上面的代码创建了一个包含三个字符串项目的JList,并使用DefaultListCellRenderer作为单元格渲染器。DefaultListCellRenderer是Swing提供的标准单元格渲染器,它可以用于大多数应用场景。

处理JList的选择事件

当用户通过JList选择了一个或多个项目时,可以使用JListSelectionListener来处理选择事件。

list.addListSelectionListener(e -> {
    if (!e.getValueIsAdjusting()) {
        JList<String> source = (JList<String>) e.getSource();
        List<String> selectedValuesList = source.getSelectedValuesList();
        System.out.println(selectedValuesList);
    }
});

上面的代码添加了一个JListSelectionListener到JList中,当用户选择了一个或多个项目时,它会打印所选的项目列表。

设置JList的模式和选择模式

JList有两种模式:单选模式和多选模式。默认情况下,JList使用单选模式。可以使用setSelectionMode方法来设置JList的模式。

list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

上面的代码将JList的模式设置为多选模式。

JList的模式设置后,可以使用getSelectedValuesList方法获取所选的项目列表。

使用自定义单元格渲染器

除了使用默认的单元格渲染器,还可以使用自定义的单元格渲染器。

list.setCellRenderer((list1, value, index, isSelected, cellHasFocus) -> {
    JLabel label = new JLabel(value);
    label.setIcon(new ImageIcon(getClass().getResource("/images/icon.png")));
    if (isSelected) {
        label.setBackground(list1.getSelectionBackground());
        label.setForeground(list1.getSelectionForeground());
    } else {
        label.setBackground(list1.getBackground());
        label.setForeground(list1.getForeground());
    }
    label.setOpaque(true);
    return label;
});

上面的代码使用了一个自定义的单元格渲染器,它显示了一个图标和文本。如果单元格被选中,它会改变背景和前景颜色。

总结

本文介绍了如何创建和使用JList,以及如何处理JList的选择事件。我们还了解了JList的模式和选择模式,以及如何使用自定义单元格渲染器。

JList是一个非常灵活和功能强大的组件,它可以显示任何类型的项目,并允许用户进行单选或多选。如果您正在构建一个Swing应用程序,您一定会在某个地方使用JList。