2013-09-27 31 views
0

我有一個帶有複選框列的表,我可以像我想要的那樣顯示該表,並且可以編輯該複選框所在的列。問題是,當我選擇複選框的複選框正確的方式複選框,但tablemodel中的值沒有改變,這個值只是改變,直到我在另一個複選框中點擊,總是我選擇的最後一個複選框沒有反映了他在TableModel中的價值。我使用的類是:TableModel在其他複選框中單擊另一個單擊後,更改jcheckbox單元格的值

Checkcell

class CheckCell extends DefaultCellEditor implements TableCellRenderer{ 

    private JComponent component = new JCheckBox();  
    private boolean value = false; 

    public CheckCell() { 
     super(new JCheckBox()); 
    } 


    @Override 
    public Object getCellEditorValue() { 
     return ((JCheckBox)component).isSelected();   
    } 


    @Override 
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 

     ((JCheckBox) component).setBackground(new Color(200,200,0)); 

     boolean b = ((Boolean) value).booleanValue(); 
     ((JCheckBox) component).setSelected(b); 
     ((JCheckBox) component).setHorizontalAlignment(SwingConstants.CENTER); 
     return ((JCheckBox) component);  
    } 


    @Override 
    public boolean stopCellEditing() {   
     value = ((Boolean)getCellEditorValue()).booleanValue() ; 
     ((JCheckBox)component).setSelected(value); 
     return super.stopCellEditing(); 
    } 


    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     if (value == null) 
      return null;   
     return ((JCheckBox) component); 
    } 

} 

CheckRender

class CheckRender extends JCheckBox implements TableCellRenderer { 

    private JComponent component = new JCheckBox(); 


    public CheckRender() { 
     setOpaque(true); 
    } 


    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 

     ((JCheckBox) component).setBackground(new Color(0,200,0)); 

     boolean b = ((Boolean) value).booleanValue(); 
     ((JCheckBox) component).setSelected(b); 
     ((JCheckBox) component).setHorizontalAlignment(SwingConstants.CENTER); 
     return ((JCheckBox) component); 
    } 

} 

我的模型

class DynaTableModel extends DefaultTableModel { 

    public DynaTableModel() { 
     super(); 
    } 

    public DynaTableModel(final DynaTableBean dynaBean) { 
     super(dynaBean.getContent(), dynaBean.getHeaders()); 
    }  

    @Override 
    public boolean isCellEditable(int row, int col) { 
     if (col == 0)  
     { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    @Override 
    public void setValueAt(Object value, int row, int column) { 
     super.setValueAt(value, row, column); 
    } 

你能幫我解決嗎?當在複選框中進行更改時,我想要更改jtable中的值。

我是java新手,我認爲有些東西是想念我的。 謝謝先進。


是一個小更明確地,當我選中該複選框,然後我試圖恢復從TableModel的價值是錯誤的例子,如果我選中第一個複選框的價值,我試着用回收有價值:

valor =(布爾型)tablemodel.getValueAt(i,0);

我得到錯誤,當這應該是真的,但如果我檢查第一個複選框,然後第二個第一個複選框的值現在罰款(真),但第二個仍然是假的是一種錯誤,但我沒有找到避免這種情況的方法。

有人知道如何避免這種情況。

+0

不重新發明輪子,往往不是結局一個三角形;-)換句話說:你的編輯器實現是無效的。和複選框編輯器的布爾值是默認支持...只是學會正確使用它們 – kleopatra

回答

2

我有一個複選框列一個表,我能夠證明表 像我想和我做編輯只是列在複選框 放置。問題是當我選中複選框 的複選框正確的方式複選框,但表模型中的值不是 更改,這個值只是改變,直到我點擊另一個 複選框,總是我選擇的最後一個複選框不反映了他在TableModel 值

+0

我已經將值爲false的向量傳遞到第一列,並且工作正常,問題出現在我選擇任何複選框,表模型識別(更新)這個改變,直到我選擇另一個複選框,所以第一個在tablemodel中被改變,但是我選擇的最後一個仍然有相同的值。 – user2824421

+0

@ user2824421:另請參閱此[答案](http://stackoverflow.com/a/18985782/230513)。 – trashgod

相關問題