我是一名軟件開發人員學徒,必須爲我的公司編寫一個圖形項目特定的配置編輯器。我使用Apache POI從項目的配置excel文件加載數據並將數據包裝到ConfigValue對象中。對於不同的ConfigValue對象,必須有不同的單元格編輯器和渲染器...當TableCellEditor設置新值時,TableCellRenderer不會更改值
我的程序的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;
}
}