我是一名软件开发人员,必须为我的公司编写特定于图形项目的配置编辑器。我使用Apache POI从项目的配置excel文件中加载数据,然后将数据包装到ConfigValue对象中。对于不同的ConfigValue对象,必须有不同的单元格编辑器和渲染器...
我的程序的GUI使用自定义JTable和DefaultTableModel。表/模型中的每个值都是一个ConfigValue,对于定义的不同ConfigType,应该以不同的方式呈现。 (到目前为止,我一切都正常了-导入,包装,加载到表中)
但是我对其中一种自定义类型的TableCellRenderer
或TableCellEditor
存在一些问题,这些自定义类型应呈现为包含所有可能的后端实体值的ComboBox。 ComboBox被渲染并显示正确的开始值...但是当我将一个单元格更改为另一个ConfigValue ...渲染器不会显示该值...(它始终更改为相同的值(编辑器的第一个值) )
谁能帮助我解决我的编辑器/渲染器的问题?
public class ConfComboBoxCellEditor extends DefaultCellEditor {
public ConfComboBoxCellEditor(List<ConfigValue> possibleValues) {
super(new JComboBox(possibleValues.toArray()));
}
@Override
public Object getCellEditorValue() {
Object cellEditorValue = super.getCellEditorValue();
System.out.println("DEBUG - CELL EDITOR - get editor value --> " + ((ConfigValue) cellEditorValue).toString());
return cellEditorValue;
}
}
public class ConfComboBoxCellRenderer extends JComboBox<ConfigValue> implements TableCellRenderer {
public ConfComboBoxCellRenderer() {
System.out.println("NEW CELL RENDERER");
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
ConfComboBoxCellRenderer renderer = (ConfComboBoxCellRenderer) table.getCellRenderer(row, column);
renderer.removeAllItems();
renderer.addItem((ConfigValue) value);
renderer.setSelectedItem(value);
System.out.println("DEBUG - CELL RENDERER " + row + ", " + column + " - get cell render comp --> " + ((ConfigValue) value));
return this;
}
}
最佳答案
谁能帮助我解决我的编辑器/渲染器的问题?
JTable support JComboBox as TableCellEditor,为用作TableCellEditor的每个JComboBox设置不同的数据集没有任何问题
TableCellRenderer only shows, painting the value stored in DefaultTableModel,则renderer.xxxXxx中的每个代码行都会错误地解释Swing中的Renderers Concept,这会适得其反,并且可能是繁重的任务,Renderer不能设置/获取值,所有鼠标/键事件都会触发新事件单元格在JViewport中可见,此外还有JTable / TableModel API中的内部事件,
您的渲染器与如何将JComboBox绘制为渲染组件无关
没有切割刀,也没有SSCCE / MCVE的细节,可短期运行,可使用局部变量中的JTable / DefaultTableModel的硬编码值进行编译