我在JTable中使用JComboBox作为CellRenderer 一切正常,JComboBox显示相应行的正确项目。
我目前正在处理的问题是,当我在JComboBox中选择一个新值(例如第9行)时,值设置正确,但是当我尝试更改下一行中的值时,JComboBox(用于第10行中的示例自动设置之前的行的值。
我创建了一个DropDownCellRenderer类,它扩展了JComboBox并实现了TableCellRenderer,我认为这已经足够了,但似乎DropDownCellRenderer-object对于每一行都是相同的。
table.getColumnModel().getColumn( 3 ).setCellRenderer( new DropDownCellRenderer() );
table.getColumnModel().getColumn( 3 ).setCellEditor( new DefaultCellEditor( new DropDownCellRenderer() ) );
如何避免每行使用相同的对象?
答案 0 :(得分:2)
查看渲染器的源代码。
我认为您不必按名称查找产品。传递给您<{>>的value
是产品,它来自您的表格模型(如果它已正确实施)。只需将value
设置为所选项目即可。
要使渲染器正常运行,请根据isSelected
参数更改其前景色和背景色。代码应如下所示:
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
使您的初始值数组成为构造函数的参数。这会将渲染器转换为通用组合框渲染器。
答案 1 :(得分:1)
听起来你在组合框中保存和显示值,而不是从表的模型中显示。设置值并保存组合框值时,需要更新模型