JTable 不使用 CTRL 进行多选

2023-12-09

我正在尝试更改 JTable 的选择行为,以便能够在不使用 CTRL 修饰符的情况下向选择添加和删除行。方法:

public void changeSelection(int rowIndex,
                        int columnIndex,
                        boolean toggle,
                        boolean extend)

似乎正是我正在寻找的,特别是这种情况:

toggle: true, extend: false. If the specified cell is selected, deselect it. If it is not selected, select it. 

这就是我想做的。问题是我无法让它发挥作用。也许我缺少一些有关内部 JTable 工作的信息,但这是我的代码:

initComponents();

    mainTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    mainTable.setRowSelectionAllowed(true);

    mainTable.setSelectionModel(new DefaultListSelectionModel() {
        @Override
        public void addSelectionInterval(int index0, int index1) {
            if (index0 == index1) {
                for (int i = 0; i < mainTable.getColumnModel().getColumnCount(); i++) {
                    mainTable.changeSelection(index0, i, true, false);
                }
            }
        }

    });

这似乎什么也没做。谁能告诉我有什么问题吗?

Thanks.


您可以创建一个自定义ListSelectionModel.

简单的例子:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ToggleListSelectionModel extends DefaultListSelectionModel
{
    @Override
    public void setSelectionInterval(int index0, int index1)
    {
        //  Select multiple lines

        if (index0 != index1)
        {
            super.addSelectionInterval(index0, index1);
            return;
        }

        //  Toggle selection of a single line

        if  (super.isSelectedIndex(index0))
        {
            super.removeSelectionInterval(index0, index0);
        }
        else
        {
            super.addSelectionInterval(index0, index0);
        }
    }

    private static void createAndShowGUI()
    {
        String[] numbers = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
        final JList<String> list = new JList<String>( numbers );
        list.setVisibleRowCount( numbers.length );
        list.setSelectionModel(new ToggleListSelectionModel());
//      list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        JButton clear = new JButton("Clear");
        clear.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                list.clearSelection();
            }
        });

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(list), BorderLayout.CENTER);
        frame.add(clear, BorderLayout.PAGE_END);
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

该示例针对 JList,但 JTable 也使用 ListSelectionModel。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTable 不使用 CTRL 进行多选 的相关文章

  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • Java:为什么.class文件中的方法类型包含返回类型,而不仅仅是签名?

    class 文件的常量池中有一个 NameAndType 结构 它用于动态绑定 该类可以 导出 的所有方法都被描述为 签名 返回类型 喜欢 getVector Ljava util Vector 当某些 jar 中方法的返回类型发生更改时
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 当前平台不支持桌面 API

    我遇到过这个错误 java lang UnsupportedOperationException 当前平台不支持桌面 API 我将从我的 java 应用程序中打开一个文件 我用这个方法 Desktop getDesktop open new
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 递归取消 allOf CompletableFuture

    如果我有 CompletableFuture
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • Expressjs 中的两个应用程序

    我正在使用 Express js 构建一个应用程序 该应用程序将有不同的客户端 例如网络和移动客户端 我不想同时使用一个应用程序 因为某些中间件会带来额外的负担 比如会话中间件 那么一个项目是否可以有两个应用程序呢 它将如何运作 The a
  • Rails 3 + devise:如果注册表有错误,如何防止删除其他字段中的数据?

    我的设备注册表中有一个自定义字段 referral code 还有一个自定义注册控制器 这样我可以在注册后重定向到自定义 检查您的电子邮件 页面 一切正常 除非新用户在显示错误消息时犯了错误 例如密码 确认不匹配 它也会删除推荐代码字段 当
  • ASP.NET MVC 添加视图对话框关闭

    最近 我从事的一个大型项目开始出现 添加视图 对话框的问题 当点击Add Strongly typed View复选框时 旋转器第一次出现大约一两秒 然后整个对话框关闭并消失 如果我打开该对话框并再次单击该按钮 它就会再次快速关闭 该项目使
  • 将 mysql_query 转换为 $wpdb->get_results

    在服务器上更新 php 后 我的 mysql query 出现了一些问题 您的代码中有 2 个函数在当前版本的 PHP 中已被弃用 mysql fetch array mysql query global table prefix wpdb
  • 更新到最新版本的 CocoaPods?

    我在安装时遇到一些问题Alamofire 4 0进入我的项目 我有最新版本的Xcode 跑步Swift 3 当我尝试安装 alamofire 时 我收到了 800 个编译器错误 显然 构建 Alamofire 4 0 0 需要 CocoaP
  • 更新 JProgressBar

    我无法更新我的进度条 这是我的代码 Thread t new Thread new Runnable public void run int i 1 jProgBar setMinimum 0 jProgBar setMaximum 100
  • for(;;) 是什么意思?

    我很困惑for 构造 我认为这是无限 for 循环的一种简写形式 但我不能确定 这是代码 for whatever statements Your guess is correct it s an infinite loop This is
  • 为什么此 Firestore 事务冻结?

    下面的简单代码冻结了 要重现 只需替换this firestoreProvider with admin initializeApp firestore console log Init the cat const kittyRef thi
  • 操作栏检测片段中的后退按钮单击

    我有一个片段 其中启用了操作栏后退按钮 Code Override public void onAttach Activity activity super onAttach activity setHasOptionsMenu true
  • 使用另一个java程序编译一个java程序

    我想制作一个java程序 从文件中读取另一个java程序 编译它并显示错误和警告 我还想显示从文件读取并编译的程序的输出 我怎样才能做到这一点 看一眼javax tools JavaCompiler 从程序调用 Java 编程语言编译器的接
  • 如果清单 v3 中不允许当前选项卡 url,则阻止弹出窗口

    我正在编写一个 chrome 扩展 我想完全禁用弹出窗口 或者在 v3 清单不允许当前选项卡的 url 时显示一条消息host permissions财产 这是一个开发支持工具 我们不希望为生产 URL 启用它 所以如果我设置 host p
  • 将内容放入 HttpResponseMessage 对象中?

    几个月前 微软决定更改 HttpResponseMessage 类 以前 您可以简单地将数据类型传递到构造函数中 然后使用该数据返回消息 但现在不行了 现在 您需要使用 Content 属性来设置消息的内容 问题是它是 HttpConten
  • 如何将十六进制序列毫无歧义地转换为汇编语言?

    8B EC 56 8B F4 68 00 70 40 00 FF 15 BC 82 40 像上面这样的序列可以通过多种方式进行分段 每个段都可以翻译为相应的汇编指令 但是每个二进制可执行文件都有其唯一的确定的汇编 避免歧义的数学原理是什么
  • 核心动画围绕任意点旋转图层

    如何使用核心动画围绕任意点旋转图层 在我的例子中 一个点不在我想要旋转的图层内部 我更喜欢在不更改锚点的情况下执行此操作 因为除非每次更改锚点时出现错误 否则它也会更改图层的位置 我尝试了类似的方法 但没有成功 UIImageView be
  • strtol 使用 errno

    我有以下代码 include
  • 方法 findViewById(int) 未定义

    我是 Android 开发新手 我正在尝试编写一个小应用程序 它允许我获取外部 JSON 文件并解析它 我让它工作了 但是如果我尝试在后台执行它 它就不会工作AsyncTask Eclipse 给我错误 对于 LongOperation 类
  • 如何清除tomcat中的PermGen space错误

    我在 Windows 环境中工作 每次使用 tomcat 时都会收到此错误 Apr 30 2012 5 30 37 PM org apache catalina core StandardWrapperValve invoke SEVERE
  • 在 Java 中读取奇怪的 unicode 字符?

    我有以下文本文件 文件以utf 8编码保存 我使用以下代码来读取文件的内容 FileReader fr new FileReader f txt BufferedReader br new BufferedReader fr String
  • Canvas for Node.js 在本地工作但不能在 Heroku 服务器上工作

    我正在使用帆布包对于 Node js 它在我的计算机上运行良好 但当我将其上传到我的 Heroku 服务器时 它不起作用 我所说的 工作正常 是指画布包已正确安装npm install canvasNode js 应用程序按预期工作 但是
  • JTable 不使用 CTRL 进行多选

    我正在尝试更改 JTable 的选择行为 以便能够在不使用 CTRL 修饰符的情况下向选择添加和删除行 方法 public void changeSelection int rowIndex int columnIndex boolean