2014-07-09 96 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硬編碼值

相關問題