2014-07-09 26 views
2

我是一名软件开发人员学徒,必须为我的公司编写一个图形项目特定的配置编辑器。我使用Apache POI从项目的配置excel文件加载数据并将数据包装到ConfigValue对象中。对于不同的ConfigValue对象,必须有不同的单元格编辑器和渲染器...当TableCellEditor设置新值时,TableCellRenderer不会更改值

我的程序的GUI使用自定义的JTable和DefaultTableModel。表格/模型中的每个值都是ConfigValue,对于定义的不同ConfigType,该值应该不同。 (到目前为止所有工作 - 进口,包装,加载到表)

但我有一个自定义类型的TableCellRendererTableCellEditor一些问题,应该呈现为一个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; 
    } 
} 

回答

1

谁能帮我出了什么我做错了我的编辑器/渲染器?

  • JTable support JComboBox as TableCellEditor,没有任何问题,以设置不同的数据集的每个JComboBoxes的用作TableCellEditor的

  • TableCellRenderer only shows, painting the value stored in DefaultTableModel,然后内部renderer.xxxXxx每行代码在Swing missinterpreting渲染器概念的,渲染效果不佳,可能是沉重的任务,Renderer不是set/getValue的位置,所有鼠标/键盘事件触发的新事件都在JViewport中可见,以及来自JTable/TableModel API的内部事件,

  • 您的渲染是不是有关如何画的JComboBox作为呈现部件

  • 没有菜刀,也没有具体细节没有SSCCE/MCVE,短期可运行,编译与局部变量的JTable /的DefaultTableModel硬编码值

相关问题