[英]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的支持,如TableCellRenderer
和Editor
Boolean
值代表XxxTableModel
JCheckBox
,你需要把它放在true
或false
(第1列)
override public Class getColumnClass(int c) {
,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.