我使用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/