8

前言:我对 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 的好教程的链接。非常感谢任何帮助:)

4

5 回答 5

25

无需创建自己的表格渲染器。 这是一个更简单的例子。只需创建一个自定义表模型,并为给定的列返回 Boolean 类:

public Class getColumnClass(int column)

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

public boolean isCellEditable(int row, int column)

JTable 会为您处理渲染。

另一个例子是here。

于 2010-05-25T01:50:13.597 回答
6

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

class NewTableModel extends DefaultTableModel{
        public Class<?> getColumnClass(int columnIndex) {
            return getValueAt(0, columnIndex).getClass();
        }
    }
于 2011-08-07T19:43:38.780 回答
4

这是一个使用and的简单而复杂的示例。另请参阅概念:编辑器和渲染器TableCellRendererTableCellEditor

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

于 2010-05-25T01:43:38.413 回答
3

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

于 2010-05-25T07:02:25.840 回答
-5

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

于 2012-11-11T05:54:32.120 回答