首页 >Java >java教程 >如何在 JTable 中允许非连续单元格选择?

如何在 JTable 中允许非连续单元格选择?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-23 08:26:36754浏览

How to Allow Non-Continuous Cell Selection in a JTable?

允许单个和非连续的 JTable 单元格选择

理解要求

任务是使用户能够选择多个不连续的单元格JTable,允许在连续单元格组之外进行更灵活的单元格选择。

探索解决方案

1.利用 ListSelectionModel

JTable 的 setSelectionModel() 方法允许您自定义选择模型。通过设置为ListSelectionModel.SINGLE_SELECTION并添加监听器来处理InputEvent.CTRL_MASK,可以实现非连续单元格选择。

2.自定义 MouseEvent 处理

通过重写 JTable 中的 processMouseEvent() 方法,您可以修改事件的修饰符以指示按下了控制键。这样,表格的行为就像用户按住 Control 键一样,启用多个单元格选择。

3.实现自定义列表选择模型

如果内置选择模型不能满足您的要求,您可以创建自己的 ListSelectionModel 实现,以所需的方式管理单元格选择。

4.示例实现

以下代码片段提供了一个 SSCCE,它演示了允许在 JTable 中进行非连续单元格选择的自定义 processMouseEvent() 方法:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class TableSelection extends JFrame {

    public TableSelection() {
        JPanel main = new JPanel();

        // Initialize table data
        String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
        Object[][] data = {
            {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
        };

        // Override processMouseEvent to add control modifier
        JTable table = new JTable(data, columnNames) {
            @Override
            protected void processMouseEvent(MouseEvent e) {
                int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
                MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                        e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
                super.processMouseEvent(myME);
            }
        };
        JScrollPane pane = new JScrollPane(table);
        main.add(pane);
        this.add(main);
    }

    public static void main(String[] args) {
        new TableSelection();
    }
}

此实现允许您通过按住 Ctrl 键的同时单击所需的单元格来选择不连续的单元格。

以上是如何在 JTable 中允许非连续单元格选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn