”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 JTable 中启用非连续单元格选择?

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

发布于2024-11-16
浏览:406

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。

演示:

以下代码片段创建一个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);
            }
        });
    }
}
最新教程 更多>
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-16
  • 什么时候应该使用 jmap 的 -F 选项进行堆转储?
    什么时候应该使用 jmap 的 -F 选项进行堆转储?
    jmap 操作期间无法打开套接字文件:-F 选项尝试使用 jmap 获取堆转储时遇到问题,导致错误消息:“无法打开套接字文件”。这表示 HotSpot JVM 未加载或目标进程无响应。为了解决这个问题,使用 -F 选项来利用一种不同的机制,称为 HotSpot Serviceability Agen...
    编程 发布于2024-11-16
  • 如何使 CSS 动画在 Webkit 中完成后保持原状?
    如何使 CSS 动画在 Webkit 中完成后保持原状?
    理解Webkit CSS动画持久性使用CSS3动画时,经常会遇到动画元素恢复到原始状态的情况动画完成。虽然此行为符合动画停止的标准逻辑,但在某些用例中似乎违反直觉。考虑提供的示例,其中使用 Webkit CSS 语法将“drop_box”元素设置为下降 100 像素的动画。动画完成后,框中的文本跳回...
    编程 发布于2024-11-16
  • 如何使用 Selenium 单击具有复杂 HTML 结构的按钮?
    如何使用 Selenium 单击具有复杂 HTML 结构的按钮?
    Selenium 单击具有复杂 HTML 结构的按钮当尝试使用 Selenium 单击具有复杂 HTML 结构的按钮时,您可能会遇到NoSuchElementException。当按钮的 HTML 包含多个具有 onclick 属性的类或元素时,可能会发生这种情况。要准确单击此类按钮,请按照下列步骤...
    编程 发布于2024-11-16
  • 如何删除 PHP 中特定子字符串之后的所有内容?
    如何删除 PHP 中特定子字符串之后的所有内容?
    如何删除 PHP 中特定子字符串之后的部分字符串您可以使用以下命令删除 PHP 中特定子字符串之后的所有内容substr() 函数。 substr()函数接受三个参数:输入字符串起始位置长度 要删除某个子字符串之后的所有内容,可以使用 strpos() 函数查找该子字符串在输入字符串中的位置。然后,...
    编程 发布于2024-11-16
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-16
  • 我们如何计算 JavaScript 对象的大致内存占用量?
    我们如何计算 JavaScript 对象的大致内存占用量?
    确定 JavaScript 对象的内存占用在 JavaScript 中,了解对象的内存消耗对于优化性能和避免内存泄漏至关重要。本文解决了获取 JavaScript 对象大小的查询,深入研究了估计此类对象所占用的大致内存的解决方案。确定对象大小In JavaScript 中没有专门设计的内置函数来确定...
    编程 发布于2024-11-16
  • 如何使用 CSS 设置图像地图区域的样式?
    如何使用 CSS 设置图像地图区域的样式?
    您可以使用 CSS 在图像映射上设置鼠标悬停样式吗?图像映射用于描绘图像中的可单击区域。默认情况下显示为简单几何形状的这些区域的样式可以用作视觉交互界面。人们可能想知道这对于 CSS 是否可行,CSS 是网站美观不可或缺的工具。虽然 CSS 无法直接设置图像映射区域的样式,但有一些巧妙的解决方法可以...
    编程 发布于2024-11-16
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-16
  • 当我的传单地图位于数据切换选项卡内时,为什么我无法下载它?
    当我的传单地图位于数据切换选项卡内时,为什么我无法下载它?
    数据切换选项卡阻碍传单地图下载当数据切换选项卡中的传单地图无法正确下载时,就会出现此问题。地图以前在选项卡外部显示时可以正常工作。原因Leaflet 在读取容器大小时初始化地图。当容器最初被隐藏或其尺寸发生变化时,Leaflet 仍然不知道这些变化,从而导致错误的切片下载。在 Bootstrap 等...
    编程 发布于2024-11-16
  • 如何在 C++ 中实现 Go 风格的 Defer 而不牺牲性能?
    如何在 C++ 中实现 Go 风格的 Defer 而不牺牲性能?
    C 语言中的 Defer 实现 Go 风格的 defer 概念允许干净简洁的资源清理,在 C 语言中很受欢迎。然而,为此功能找到标准或支持良好的库实现可能具有挑战性。尽管标准模板库 (STL) 或 Boost 中缺乏对 defer 的内置支持,但仍有可用的外部实现。其中一种实现是轻量级、零开销的解决...
    编程 发布于2024-11-16
  • 如何在 Go 中使用反射自定义 JSON 解组?
    如何在 Go 中使用反射自定义 JSON 解组?
    使用反射自定义 JSON 解组在 Go 中,将 JSON 解组为结构体是一个简单的过程。然而,当处理具有自定义标签的字段时,例如 json:"some_field",标准的解组机制可能不够。处理这种情况的一种方法是使用反射。通过使用反射检查结构体的字段,我们可以检查字段是否具有特...
    编程 发布于2024-11-16
  • 如何轻松地将代码传输到 Python 解释器中而不出现缩进问题?
    如何轻松地将代码传输到 Python 解释器中而不出现缩进问题?
    便捷的代码传输:绕过 Python 的空白敏感度由于语言严格的空白,将代码直接复制粘贴到 Python 解释器中可能会出现问题敏感性。这通常会导致意外的代码执行或语法错误。IPython 作为解决方案IPython 是一种高级 Python 命令 shell,通过其专用命令。%cpaste:将剪贴板...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3