仅在一个 JTable 单元格中的复选框

2024-05-01

我想创建一个JTable有 2 列,看起来像一个调查。 所以左边是问题,右边是用户可以给出他的答案。 但在一行的右侧应该有一个复选框,以便用户只能回答是或否。

这可以用JTable,我怎样才能做到这一点?

regards


您在评论中指出:

我用一列 JCheckboxes 尝试了它,它可以工作,但我只想将它放入 一个细胞

请注意,这个要求有点棘手。我认为你可以覆盖getCellRenderer(int 行, int 列) http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#getCellRenderer%28int,%20int%29 and getCellEditor(int 行, int 列) http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#getCellEditor%28int,%20int%29方法询问单元格值的类。

这样,单元格渲染器/编辑器将是JCheckbox即使表的行已排序或表的列已重新排列。

像这样的东西:

    JTable table = new JTable(model) {
        @Override
        public TableCellRenderer getCellRenderer(int row, int column) {
            if(getValueAt(row, column) instanceof Boolean) {
                return super.getDefaultRenderer(Boolean.class);
            } else {
                return super.getCellRenderer(row, column);
            }
        }

        @Override
        public TableCellEditor getCellEditor(int row, int column) {
            if(getValueAt(row, column) instanceof Boolean) {
                return super.getDefaultEditor(Boolean.class);
            } else {
                return super.getCellEditor(row, column);
            }
        }
    };

Example

这是一个完整的例子。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class Demo {

    private void createAndShowGUI() { 

        DefaultTableModel model = new DefaultTableModel(new Object[]{"Column # 1", "Column # 2"}, 0);
        model.addRow(new Object[]{"Property # 1", "Value # 1"});
        model.addRow(new Object[]{"Property # 2", Boolean.TRUE});
        model.addRow(new Object[]{"Property # 3", "Value # 3"});

        JTable table = new JTable(model) {
            @Override
            public TableCellRenderer getCellRenderer(int row, int column) {
                if(getValueAt(row, column) instanceof Boolean) {
                    return super.getDefaultRenderer(Boolean.class);
                } else {
                    return super.getCellRenderer(row, column);
                }
            }

            @Override
            public TableCellEditor getCellEditor(int row, int column) {
                if(getValueAt(row, column) instanceof Boolean) {
                    return super.getDefaultEditor(Boolean.class);
                } else {
                    return super.getCellEditor(row, column);
                }
            }
        };
        table.setAutoCreateRowSorter(true);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(new JScrollPane(table));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {                
                new Demo().createAndShowGUI();
            }
        });
    }    
}

截图

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

仅在一个 JTable 单元格中的复选框 的相关文章

随机推荐

  • 为什么仅当项目中使用 lambda 时,javaassist 在加载 Entitymanager 时才会抛出 invalid Constant type: 18

    在发布这个具体问题之前 我阅读了很多 QnA 大部分的javassist 无效常量 18问题已得到解答以升级javassist库 基于这些 QnA 我还将项目中的 lib 升级到了最新版本 它确实有效 但我不明白以下内容 需要有人帮助提供一
  • Robo 3T 错误:网络无法访问

    我正在尝试将 Robo 3T 连接到我的在线数据库 但它似乎不起作用 我可以用它连接到本地数据库 我尝试使用 MongoDB Compass 进行连接 详细信息和身份验证工作正常 我能够连接 但当我在 Robo 3T 中连接相同的细节时 它
  • 我想更改此代码以仅显示“确定”并删除取消按钮

    我想更改此代码以仅显示 确定 并删除取消按钮 Object contestacion5 JOptionPane showInputDialog null 5 Que describe mejor a la Norte a Examen Ti
  • .NET:对象头有什么用?

    在 NET 中 每个对象有 8 个字节的开销 4 个字节是指向对象类型的指针 另外 4 个字节 称为对象头 有何用途 注意 这个问题是在 2010 年提出的 并且是 32 位特定的 开销与位数相关 1 个指针大小用于 对象类型 方法表 1
  • 向元素添加类

    像这样 我有两个选项卡 所以当我单击其中一个选项卡时 它是活动的 逻辑的 现在我试图区分活动选项卡和非活动选项卡 但不是使用 css 属性 但我想向单击的选项卡添加特定的类 如下所示 tab1 addClass active 但是 没有什么
  • 如何避免 C 运行时 (crt*.o) 垃圾

    我有两个C源文件 foo1 c include
  • 条形图中的并排条形

    这是基于这个帖子 https stackoverflow com questions 26913954 make barplot in ggplot2 with summary statistics noredirect 1 comment
  • 如何更改matplotlib中填充线的线宽?

    有没有办法增加 matplotlib 中剖面线的宽度 例如 下面的代码通过指定linewidth仅改变边缘的宽度 我想更改用于填充的线的线宽 import matplotlib pyplot as plt import numpy as n
  • 在 WPF 中展开 TreeView 时显示“请稍候...”消息

    我的 TreeView 中有很多项目 而且项目也非常复杂 我不想使用虚拟化 展开 TreeView 有时需要花费大量时间 因此 是否有任何事件 例如 IsTreeViewExpanding 或类似的事件 我可以在其中显示 正在生成 Tree
  • 替换 lambda 表达式中的参数类型

    我正在尝试将 lambda 表达式中的参数类型从一种类型替换为另一种类型 我在 stackoverflow 上找到了其他答案 即this one https stackoverflow com questions 11159697 repl
  • 修改文本文件而不读入内存

    我试图找出一种修改文本文件 特别是删除特定行 的方法 而无需将文件的大部分读取到内存中或重写整个文件 这里讨论的是大于主内存约 15 50 Gigs 的文件 附 我正在使用Linux 你不会逃避创建一个新文件 所以就硬着头皮去做吧 使用gr
  • 在汇编中显示两位数? [复制]

    这个问题在这里已经有答案了 我对汇编编程完全陌生 在课堂作业的示例中 需要将两个数字相加并显示总和 我发现神秘的是当其是两位数时显示总和 这是我的代码 mov al num1 mov bl num2 add al bl add ax 303
  • 我应该为每个选项卡栏使用单独的 UINavigationController

    根据Apple https developer apple com library ios documentation WindowsViews Conceptual ViewControllerCatalog Chapters Combi
  • Node.js、EventEmitter 为什么使用它

    我有一个问题events EventEmitter在 Node js 中 为什么使用它 示例1和示例2有什么区别 我发现它们是相同的 是吗 什么时候可以实际使用它 let events require events let util req
  • 在 Libgdx 中实现简单运动模糊的意外结果

    在所附的两张图片中 libgdx 的桌面屏幕截图按预期运行 不幸的是 我的 Galaxy Nexus 的屏幕截图与预期不符 我正在尝试创建一个简单的运动模糊或轨迹效果 Rendering as I expected on my deskto
  • C++:输入和输出流运算符:结合性

    输入 输出流运算符理论上的结合性 左到右 例如 根据这个 圣玛丽大学网站 http cs smu ca porter csc ref cpp operators html 输入 输出流运算符结合性实践 include
  • 开源html解析类无法正确解析段落之间的空格

    我正在使用一种开源方法 将 html 文本解析为 NSString 生成的字符串在前几个段落之间有大量空格 但后续段落只有一行空格 这是输出的示例 Below is the method I m calling I ve only chan
  • 如何在 ASP.NET 中将下拉列表与字符串数组绑定?

    我可以通过这样做将下拉列表与字符串数组绑定 不确定这是否是正确的实现方法 string items 111 222 333 ddlSearch DataSource items ddlSearch DataBind 然而 我真正想要的是 当
  • 使用并发.futures.ProcessPoolExecutor 动态创建函数的限制

    我正在尝试使用我在其他函数中动态创建的函数进行一些多重处理 如果提供给 ProcessPoolExecutor 的函数是模块级的 我似乎可以运行这些 def make func a def dynamic func i return i i
  • 仅在一个 JTable 单元格中的复选框

    我想创建一个JTable有 2 列 看起来像一个调查 所以左边是问题 右边是用户可以给出他的答案 但在一行的右侧应该有一个复选框 以便用户只能回答是或否 这可以用JTable 我怎样才能做到这一点 regards 您在评论中指出 我用一列