首页  >  文章  >  Java  >  如何在 JTable 中启用非连续单元格选择?

如何在 JTable 中启用非连续单元格选择?

DDD
DDD原创
2024-11-08 16:41:02918浏览

How to Enable Non-Continuous Cell Selection in JTable?

在 JTable 中选择不连续的单元格

在 JTable 中,默认选择模式仅允许选择连续的单元格。为了实现单个、非连续的细胞选择,可以考虑以下方法:

1。 CTRL MOUSE_CLICK:

如果未设置 setSelectionMode(ListSelectionModel.SINGLE_SELECTION),则在单击单元格时按住 CTRL 键可以选择多个非连续单元格。

2.修改后的 ListSelectionModel:

由于 ListSelectionModel 由 JTable 和 JList 共享,因此可以使用以下修改后的 ListSelectionModel:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class NonContSelectionModel extends DefaultListSelectionModel {

    @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);
    }
}

可以通过使用 setSelectionModel( new NonContSelectionModel())。

演示:

以下代码片段创建一个 JTable,允许使用修改后的 ListSelectionModel 进行非连续单元格选择:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class NonContJTableSelection {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                String[] columnNames = {"Name", "Age", "Profession"};
                Object[][] data = {
                        {"John Doe", 30, "Software Engineer"},
                        {"Jane Doe", 28, "Doctor"},
                        {"Peter Jones", 45, "Lawyer"}
                };
                JTable table = new JTable(data, columnNames);
                table.setSelectionModel(new NonContSelectionModel());
                JScrollPane scrollPane = new JScrollPane(table);
                panel.add(scrollPane);

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

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

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