JTable 中的多行选择

2024-01-02

我有一个 JTable,其中一列是不可编辑的文本,第二列是一个显示布尔值的复选框......现在我想要的是,当用户选择多行并取消选中其中任何一行时选中复选框,则选择下的所有复选框都应取消选中,反之亦然。


使用@Hovercraft 的示例和@camickr 的建议,下面的示例显示了合适的用户界面。虽然它使用按钮,SelectionAction也适用于菜单或弹出窗口。

import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.DefaultListSelectionModel;
import javax.swing.table.DefaultTableModel;

/** @see http://stackoverflow.com/questions/4526779 */
public class CheckABunch extends JPanel {

    private static final int CHECK_COL = 1;
    private static final Object[][] DATA = {
        {"One", Boolean.TRUE}, {"Two", Boolean.FALSE},
        {"Three", Boolean.TRUE}, {"Four", Boolean.FALSE},
        {"Five", Boolean.TRUE}, {"Six", Boolean.FALSE},
        {"Seven", Boolean.TRUE}, {"Eight", Boolean.FALSE},
        {"Nine", Boolean.TRUE}, {"Ten", Boolean.FALSE}};
    private static final String[] COLUMNS = {"Number", "CheckBox"};
    private DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;

    public CheckABunch() {
        super(new BorderLayout());
        this.add(new JScrollPane(table));
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
    }

    private class DataModel extends DefaultTableModel {

        public DataModel(Object[][] data, Object[] columnNames) {
            super(data, columnNames);
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            return column == CHECK_COL;
        }
    }

    private class ControlPanel extends JPanel {

        public ControlPanel() {
            this.add(new JLabel("Selection:"));
            this.add(new JButton(new SelectionAction("Clear", false)));
            this.add(new JButton(new SelectionAction("Check", true)));
        }
    }

    private class SelectionAction extends AbstractAction {

        boolean value;

        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {
                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("CheckABunch");
        frame.add(new CheckABunch());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

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

JTable 中的多行选择 的相关文章

  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 不可勾选的单选按钮与专有的复选框

    从 UI 角度来看 是拥有一组具有取消选中功能的单选按钮更好 还是拥有一组独占的复选框 意味着一次只能选中一个 更好 Update 我没想到对此会有如此负面的反应 如果我给出一个更接近其使用方式的示例 也许会有所帮助 我有一个充满数据绑定内
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 检查 Bash 列表中是否存在变量

    我正在尝试在 bash 中编写一个脚本来检查用户输入的有效性 我想匹配输入 比如变量x 到有效值列表 我现在想出的是 for item in list do if x item then echo In the list exit fi d
  • iPad Safari (iOS 5.0.1) 上的 iframe CSS3 缩放问题

    我需要放大 iframe 以使其更大 我无法控制 iframe 内容的源代码 我正在尝试通过以下方式实现它 webkit transform scale 1 3 CSS 属性 iframe 的内容已正确放大 但是当我尝试触摸 iframe
  • Azure Functions DocumentClient 无法从程序集异常加载类型

    我有一个 Azure Function v2 它调用一个实用程序库 该库又实例化一个DocumentClient 当在本地运行我的函数时 它会在此行引发异常 client new DocumentClient new Uri cosmosD
  • 响应开头额外的未定义字符[重复]

    这个问题在这里已经有答案了 这阻止了我使用 JSON 也阻止了使用 React 或 Ember 使用 AJAX 向服务器发送请求时 我收到一个额外的未定义 unicode 字符 这会导致解析器错误 因为它破坏了 JSON 我已经检查了我拥有
  • 自动将公共更改为私有(Java)

    我正在对从其他语言翻译成 Java 的代码进行重构 我想自动完成它 我的问题是 我有很多不是私有的方法 但只是在声明它们的同一个类中调用 并且我想将它们设为私有 我有很多课程 我想是否有什么可以帮助我半自动地完成它 我想知道 你知道我是否可
  • .NET 中的并行抓取

    我工作的公司运营着数百个非常活跃的网站 它决定建立一个搜索引擎 我的任务是编写爬虫 一些网站在旧硬件上运行 无法承受太多惩罚 而另一些网站则可以处理大量并发用户 我需要能够说对站点 A 使用 5 个并行请求 对站点 B 使用 2 个并行请求
  • vtkRenderer 错误

    我是 vtk 的新手 所以我首先使用 CMake 和 Visual Studio 2017 构建 vtk 8 1 1 并使用默认选项和示例 许多示例运行良好 但其中一些会出现错误 这是 CreateTree 示例 但 HelloWorld
  • 无法使用 Gradle 6.1.1 解析 junit-jupiter-params:5.6.2 和 junit-jupiter-engine:5.6.2

    我有一个 Android 项目 其中包含 2 个 Android 模块和 1 个纯 Java 模块 将 android 构建工具更新为 com android tools build gradle 4 0 0 并将 gradle 包装器更新
  • 使用 OAuth2 将 JHipster 中的前端和 API 服务器分开不起作用

    我使用 OAuth2 创建了一个简单的 JHipster 6 2 0 Angular 应用程序 并且还单独生成了一个客户端应用程序 此外 我使用 keycloak yml 为 Keycloak 创建了一个 docker JHipster 附
  • 使用 for 循环在 ggplot2 中添加图层

    我想这很容易 但我不明白 它与 ggplots 上 for 循环的使用有关 问题是 为什么下面这两个代码给出不同的结果 看起来好像在带有循环的代码上 只考虑了第二次迭代 但我不知道为什么 根本问题是 是否可以使用 ggplot2 对象运行此
  • Android 数据存储 IOException 无法重命名为

    我正在尝试在我的项目中实现 Jetpack Datastore 我当时用的是apha 01版本和代码工作正常 然后我在Gradle文件中看到有新版本所以我将其更新为alpha 03 启动我的应用程序后 我遇到了另一个问题 我发现Proto库
  • 为什么我在 Android 上无法检测到带有 unicode 字符的 wifi SSID?

    我有一个 Wi Fi AP 其 SSID 是一串 unicode 字符 例如 我希望 Android 设备连接到它 当我的设备 Nexus One 检测到热点时 SSID 看起来像这样 并且无法识别它 知道如何解决这个问题吗 802 11数
  • Python数据结构按字母顺序排序列表[重复]

    这个问题在这里已经有答案了 我对 python 中的数据结构有点困惑 and 我正在尝试对一个简单的列表进行排序 可能是因为我无法识别数据的类型 所以无法对其进行排序 我的清单很简单 Stem constitute Sedge Eflux
  • Scala:在路径相关上下文中重用路径相关类型产生的泛型

    简而言之 以下内容无法编译 原因如下 我怎样才能使其工作 trait Simulator type CM T def useCM v CM case class CMH S lt Simulator T cm S CM T class Si
  • 查找不平衡的大括号和圆括号

    海湾合作委员会4 6 0 GNU Emacs 23 2 1 我有一些 C 代码 在某些时候我一定犯了一个打字错误 现在我留下了不平衡的花括号或括号 我有大约 2000 行代码 我只是想知道有什么技术可以找到它们吗 Emacs 有一些很好的功
  • 我应该使用 ON DELETE CASCADE、 :dependent => :destroy 还是两者都使用?

    在 Rails 应用程序中 我在 MySQL 中有外键约束 我将它们全部手动设置 与我的迁移分开 我想弄清楚我是否应该使用 ActiveRecord dependent gt destroy选项 例如 在我的架构中我有表 users log
  • 如何在 python 中检索按钮的行和列信息并使用它来更改其设置

    我正在创建一个游戏并尝试用 python 和 tkinter 制作它 我已经用基于单词的 python 完成了它 并希望将其图形化 我创建了一个用作网格的按钮网格 这些按钮当前带有字母 O 以显示空白区域 然而 我想要的是显示海盗所在位置的
  • 使用 DataFrame.lookup 获取列名称是字符串子集的行

    假设有一个如下所示的简单数据框 data grades Feb 10 20 30 40 50 grades Jan 5 10 15 20 25 grades April 1 2 3 4 5 months Feb April Jan Feb
  • 如何使用具有深度限制的 jQuery find() ?

    我需要使用 jquery 的 find 选择器来获取所有具有 field container 类的 div 问题是我无法深入 DOM 树 这是我的简化 HTML 结构 div div div class field container sp
  • JTable 中的多行选择

    我有一个 JTable 其中一列是不可编辑的文本 第二列是一个显示布尔值的复选框 现在我想要的是 当用户选择多行并取消选中其中任何一行时选中复选框 则选择下的所有复选框都应取消选中 反之亦然 使用 Hovercraft 的示例和 camic