gpt4 book ai didi

java - JTable 中一列的多个单元格渲染器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:44 25 4
gpt4 key购买 nike

假设我有以下 JTable,按下按钮后立即显示:

      | Name
------+------------
True | Hello World
False | Foo Bar
True | Foo
False | Bar

我想将 initially 为 JCheckBox 的单元格渲染为 JCheckBox,而所有initially false 的单元格不显示任何内容(无 JCheckBox)。用户可以选中或取消选中最初为真的单元格中的 JCheckBoxes,这会对我创建的图表执行某些操作。

现在,我的单元格渲染器在所有单元格中显示 JCheckBoxes,包括那些最初为 false 的单元格(它显示那些没有复选标记的 JCheckBoxes),但我不想在后者中显示任何内容。这是我的代码:

protected class CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer {

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (!(Boolean) tableModel.getValueAt(row, 0)) {
NoCheckBoxCellRenderer renderer = new NoCheckBoxCellRenderer();
return renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
this.setSelected((Boolean) tableModel.getValueAt(row, 0));
return this;
}

}

protected class NoCheckBoxCellRenderer extends DefaultTableCellRenderer {

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
this.setVisible(false);
return this;
}
}

if 语句中,我尝试在使用 NoCheckBoxCellRenderer 之前使用 this.setVisible(false),但它不起作用。我正在考虑使用多个单元格渲染器来完成这项任务。有可能这样做吗?任何建议将不胜感激!

最佳答案

为真值存储 Boolean.TRUE。然后为假值存储一个空字符串。然后您将需要:

a) 覆盖 getCellRenderer(...) 方法,为单元格中找到的数据返回适当的渲染器。

b) 使包含空字符串的单元格不可编辑:

JTable table = new JTable(data, columnNames)
{
public TableCellRenderer getCellRenderer(int row, int column)
{
if (column == 0)
{
Class cellClass = getValueAt(row, column).getClass();
return getDefaultRenderer( cellClass );
}

return super.getCellRenderer(row, column);
}

public boolean isCellEditable(int row, int column)
{
Class cellClass = getValueAt(row, column).getClass();

if (column == 0 && cellClass instanceof Boolean)
{
return true;
}
else
{
return false;
}

return super.isCellEditable(row, column);
}

};

使用这种方法不需要自定义渲染器或编辑器。

关于java - JTable 中一列的多个单元格渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7690614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com