java - 在 DefaultCellEditor 派生实例完成其工作后更新单元格渲染器

标签 java swing jtable

我使用JTable,它有自己的单元格渲染器和单元格编辑器。

假设该表包含 2 列和 x 行:
第一列包含一个 boolean 值、它自己的单元格渲染和单元格编辑器(单选按钮)
第二列包含一个字符串值,它自己的单元格渲染器:当当前行的第一列设置为 true(选中单选按钮)时,它会使其变为粗体

编辑器正确更新了所有值,但当单选按钮设置为 true 时,第二行不会变为粗体...
我必须检查不同行的单选按钮才能看到更改

我可以在哪里触发这些更改?

干杯并感谢您的帮助

<小时/>

RadiobuttonTableCellEditor.java

public class RadiobuttonTableCellEditor extends DefaultCellEditor
                                    implements ItemListener {
JRadioButton rb = new JRadioButton();

public RadiobuttonTableCellEditor(JCheckBox pCheckBox) {
    super(pCheckBox);
}

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    if (value == null)
        return null;
    rb.addItemListener(this);
    rb.setSelected((Boolean)value);
    return rb;
}

public void itemStateChanged(ItemEvent e) {
    super.fireEditingStopped();
}

public Object getCellEditorValue() {
    rb.removeItemListener(this);
    return rb.isSelected();
}
}

最佳答案

在表模型中,每当您的值发生变化时,您都必须触发适当的事件。如果您的模型继承自 AbstractTableModel,您可以使用多个 fireXXX 方法。我的猜测是您应该从 setValueAt 方法调用它们。

如果您知道确切的列和行 - 您可以调用 fireTableCellUpdated,否则您可能必须使用 fireTableChanged,因为您必须更新不同的列。

当然,您的渲染器应该正确渲染新值。

关于java - 在 DefaultCellEditor 派生实例完成其工作后更新单元格渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917105/

相关文章:

java - 如何打印出数字之间的特定间距长度?

java - 如何使用 Java Swing 和 MVC 进行真正的 GUI 开发

java - LWJGL - 调用了当前上下文中不可用的函数

Java应用程序部署

java - 返回 json 意外,在 Spring 中将 "links"拼写为 "_links"并且结构不同

java - 删除 JButton 矩形白色边框

java - 序列化 JTable 的 TableModel

java - JTable 中的选定单元格不刷新

java - 通过setDataVector函数更新JTable数据

java - JTable 行标题实现