如何使 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,使用TableCellRenderer
和TableCellEditor
。另请参阅Concepts: Editors and Renderers。
附录:@Jay Askren 的观点很好。 Boolean.class
的默认渲染器(如教程中所述)可能就是您所需要的。
【讨论】:
谢谢。我没有遇到过那个特定的例子。发生了这么多事情......我会试一试【参考方案2】:无需创建自己的表格渲染器。 Here's a simpler example。只需创建一个自定义表模型,并为给定的列返回 Boolean 类:
public Class getColumnClass(int column)
如果您希望该列可编辑,请为
返回 truepublic 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? [重复]