本文目录导读:

我来详细介绍Java Swing中JList列表选择项的展示方法。
基本JList创建
import javax.swing.*;
import java.awt.*;
public class JListDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("JList Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
// 创建数据
String[] data = {"选项1", "选项2", "选项3", "选项4", "选项5"};
// 创建JList
JList<String> list = new JList<>(data);
// 添加到滚动面板
JScrollPane scrollPane = new JScrollPane(list);
frame.add(scrollPane);
frame.setVisible(true);
}
}
选择模式设置
// 单选模式(默认) list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 单区间选择 list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); // 多选模式 list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
获取选择项的方法
// 获取选中的值 String selectedValue = list.getSelectedValue(); // 获取选中索引 int selectedIndex = list.getSelectedIndex(); // 获取所有选中的值(多选模式) List<String> selectedValues = list.getSelectedValuesList(); // 获取所有选中的索引 int[] selectedIndices = list.getSelectedIndices(); // 判断是否选中 boolean isSelected = !list.isSelectionEmpty();
完整示例:带事件监听的JList
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class JListSelectionDemo extends JFrame {
private JList<String> list;
private JTextArea textArea;
public JListSelectionDemo() {
setTitle("JList 选择项展示");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLayout(new BorderLayout(10, 10));
// 创建数据
String[] data = {
"Apple", "Banana", "Orange",
"Grape", "Watermelon", "Strawberry"
};
// 创建JList
list = new JList<>(data);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// 添加选择监听器
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) { // 防止重复触发
updateSelectionInfo();
}
}
});
// 添加双击监听器
list.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
String selected = list.getSelectedValue();
JOptionPane.showMessageDialog(JListSelectionDemo.this,
"双击选中: " + selected);
}
}
});
// 创建文本显示区域
textArea = new JTextArea(5, 20);
textArea.setEditable(false);
// 布局
JScrollPane listScrollPane = new JScrollPane(list);
JScrollPane textScrollPane = new JScrollPane(textArea);
add(listScrollPane, BorderLayout.CENTER);
add(textScrollPane, BorderLayout.SOUTH);
// 按钮面板
JPanel buttonPanel = new JPanel();
JButton clearButton = new JButton("清除选择");
clearButton.addActionListener(e -> clearSelection());
JButton selectAllButton = new JButton("全选");
selectAllButton.addActionListener(e -> selectAll());
buttonPanel.add(clearButton);
buttonPanel.add(selectAllButton);
add(buttonPanel, BorderLayout.NORTH);
}
private void updateSelectionInfo() {
StringBuilder sb = new StringBuilder();
sb.append("选择模式: ").append(getSelectionModeText()).append("\n");
sb.append("是否选中: ").append(!list.isSelectionEmpty()).append("\n");
if (!list.isSelectionEmpty()) {
// 单选信息
sb.append("选中的值: ").append(list.getSelectedValue()).append("\n");
sb.append("选中索引: ").append(list.getSelectedIndex()).append("\n");
// 多选信息
sb.append("所有选中的值: ").append(list.getSelectedValuesList()).append("\n");
int[] indices = list.getSelectedIndices();
sb.append("所有选中的索引: ");
for (int i = 0; i < indices.length; i++) {
sb.append(indices[i]);
if (i < indices.length - 1) {
sb.append(", ");
}
}
sb.append("\n");
sb.append("选中数量: ").append(list.getSelectedValuesList().size());
}
textArea.setText(sb.toString());
}
private String getSelectionModeText() {
switch (list.getSelectionMode()) {
case ListSelectionModel.SINGLE_SELECTION:
return "单选";
case ListSelectionModel.SINGLE_INTERVAL_SELECTION:
return "单区间选择";
case ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:
return "多选";
default:
return "未知";
}
}
private void clearSelection() {
list.clearSelection();
}
private void selectAll() {
list.setSelectionInterval(0, list.getModel().getSize() - 1);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new JListSelectionDemo().setVisible(true);
});
}
}
自定义渲染器(显示图标+文本)
import javax.swing.*;
import java.awt.*;
public class CustomListRenderer extends JLabel implements ListCellRenderer<String> {
public CustomListRenderer() {
setOpaque(true);
setFont(new Font("Arial", Font.PLAIN, 14));
}
@Override
public Component getListCellRendererComponent(
JList<? extends String> list,
String value,
int index,
boolean isSelected,
boolean cellHasFocus) {
setText(value);
// 根据值设置图标
if (value.contains("Apple")) {
setIcon(new ImageIcon("apple_icon.png")); // 实际项目中需要真实图标
setForeground(Color.RED);
} else if (value.contains("Banana")) {
setIcon(new ImageIcon("banana_icon.png"));
setForeground(Color.YELLOW);
} else {
setIcon(null);
setForeground(Color.BLACK);
}
// 选中效果
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
}
return this;
}
}
// 使用自定义渲染器
list.setCellRenderer(new CustomListRenderer());
动态修改列表数据
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class DynamicListDemo extends JFrame {
private DefaultListModel<String> listModel;
private JList<String> list;
private JTextField inputField;
public DynamicListDemo() {
setTitle("动态列表");
setSize(300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建可修改的列表模型
listModel = new DefaultListModel<>();
listModel.addElement("初始项目1");
listModel.addElement("初始项目2");
list = new JList<>(listModel);
// 输入和按钮
inputField = new JTextField(15);
JButton addButton = new JButton("添加");
JButton removeButton = new JButton("删除选中");
addButton.addActionListener(e -> addItem());
removeButton.addActionListener(e -> removeSelectedItem());
// 布局
JPanel inputPanel = new JPanel();
inputPanel.add(inputField);
inputPanel.add(addButton);
inputPanel.add(removeButton);
add(new JScrollPane(list), BorderLayout.CENTER);
add(inputPanel, BorderLayout.SOUTH);
// 添加监听
list.addListSelectionListener(e -> {
if (!e.getValueIsAdjusting()) {
String selected = list.getSelectedValue();
if (selected != null) {
inputField.setText(selected);
}
}
});
}
private void addItem() {
String text = inputField.getText().trim();
if (!text.isEmpty()) {
listModel.addElement(text);
inputField.setText("");
inputField.requestFocus();
}
}
private void removeSelectedItem() {
int selectedIndex = list.getSelectedIndex();
if (selectedIndex != -1) {
listModel.remove(selectedIndex);
}
}
public static void main(String[] args) {
new DynamicListDemo().setVisible(true);
}
}
键盘快捷键支持
// 设置键盘选择模式(A, B, C...快速跳转)
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 注册键盘事件
list.registerKeyboardAction(
e -> handleKeyAction(),
KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
JComponent.WHEN_FOCUSED
);
// 设置滚动速度
list.getComponentPopupMenu(); // 右键菜单
- 选择模式:支持单选、单区间、多选三种模式
- 监听方式:使用
ListSelectionListener监听选择变化 - 数据模型:使用
DefaultListModel实现动态数据 - 渲染器:自定义
ListCellRenderer美化显示 - 事件处理:支持鼠标、键盘事件
这些示例涵盖了JList选择项展示的主要功能,可以根据实际需求选择使用。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播