簡體   English   中英

TableModel在其他復選框中單擊第二次后更改jcheckbox單元格的值

[英]TableModel Change the value of a jcheckbox cell after a second click in other checkbox

我有一個帶有復選框列的表格,我能夠像我想要的那樣顯示表格,並且我可以在復選框所在的列中進行編輯。 問題是當我以正確的方式選中復選框的渲染圖時,復選框但是tablemodel中的值沒有改變,這個值只是改變,直到我給另一個復選框點擊,總是我選擇的最后一個復選框不反映了他在TableModel中的價值。 我正在使用的課程是:

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 =(Boolean)tablemodel.getValueAt(i,0);

如果這應該是真的,我會變得虛假,但是如果我檢查第一個復選框,然后第二個復選框,第一個復選框的值現在很好(true)但第二個仍然是假的是一種bug但是我沒有找到避免這種情況的方法。

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

我有一個帶有復選框列的表格,我能夠像我想要的那樣顯示表格,並且我可以在復選框所在的列中進行編輯。 問題是當我以正確的方式選中復選框的渲染圖時,復選框但是tablemodel中的值沒有改變,這個值只是改變,直到我給另一個復選框點擊,總是我選擇的最后一個復選框不反映了他在TableModel中的價值

  • JTable內置了對JCheckB ox的支持,如TableCellRendererEditor

  • Boolean值代表XxxTableModel JCheckBox ,你需要把它放在truefalse (第1列)

  • override public Class getColumnClass(int c) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM