如何使 JTable 列包含复选框?

Posted

技术标签:

【中文标题】如何使 JTable 列包含复选框?【英文标题】:How to make JTable column contain checkboxes? 【发布时间】:2011-02-23 11:51:45 【问题描述】:

前言:我对 java 很讨厌,对 java ui 组件更糟。

我找到了几个关于如何向表格添加按钮的不同教程,但是我在添加复选框时遇到了困难。我需要有一列绘制一个默认选中的文本框(我认为单元格渲染器可以处理),然后单击复选框,取消选中该框,重新绘制所述框,并在我可以跟踪的地方触发一个事件。

目前我有一个自定义单元渲染器:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer 
public GraphButtonCellRenderer() 

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    if(isSelected)
        setSelected(true);
    else
        setSelected(false);
    setMargin(new Insets(0, 16, 0, 0));
    setIconTextGap(0);

    setBackground(new Color(255,255,255,0));
    return this;

当前处理绘制勾选框,但仅在选中该行时勾选和取消勾选框。但我不知道如何处理这些事件。我真正要问的可能是一个关于如何将复选框干净地添加到 JTable 的好教程的链接。 非常感谢任何帮助:)

【问题讨论】:

【参考方案1】:

这是一个简单相当详细的example,使用TableCellRendererTableCellEditor。另请参阅Concepts: Editors and Renderers

附录:@Jay Askren 的观点很好。 Boolean.class 的默认渲染器(如教程中所述)可能就是您所需要的。

【讨论】:

谢谢。我没有遇到过那个特定的例子。发生了这么多事情......我会试一试【参考方案2】:

无需创建自己的表格渲染器。 Here's a simpler example。只需创建一个自定义表模型,并为给定的列返回 Boolean 类:

public Class getColumnClass(int column)

如果您希望该列可编辑,请为

返回 true
public boolean isCellEditable(int row, int column)

JTable 会为您处理渲染。

Another example is here.

【讨论】:

+1 好点;简单一点就足够了。本教程描述了特定类的几个默认渲染器。 已接受。非常感谢您提供的链接,这些链接非常简单,我可以关注/集成我当前的项目【参考方案3】:

最简单的解决方案是使用 DefaultTableModel 并使用 Boolean 对象作为值。

【讨论】:

是的@Peter,但是如果我们希望 TRUE 值成为 ID 值,而 FALSE 仍然是 FALSE 值,我们是否可以通过向该复选框添加一些值 (ID) 来增强更多功能?【参考方案4】:

正如彼得所说,使用扩展的 DefaultTableModel 类很容易,例如:

class NewTableModel extends DefaultTableModel
        public Class<?> getColumnClass(int columnIndex) 
            return getValueAt(0, columnIndex).getClass();
        
    

【讨论】:

【参考方案5】:

在 Swing Designer 中将列类型设置为布尔值

【讨论】:

此解决方案假定 OP 正在使用某种类型的 UI 构建器

以上是关于如何使 JTable 列包含复选框?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过SQL将一列JCheckBox添加到JTable? [重复]

Swing Jtable 添加checkbox列

Java Swing,尝试用图像图标复选框替换 JTable 中的布尔复选框

Jtable-专栏

如何删除JTable的选定行(在第一列中有复选框)的文本?

JTable - Boolean.class 单元渲染器和 Nimbus 外观问题