我有一個帶有複選框列的表,我可以像我想要的那樣顯示該表,並且可以編輯該複選框所在的列。問題是,當我選擇複選框的複選框正確的方式複選框,但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);
我得到錯誤,當這應該是真的,但如果我檢查第一個複選框,然後第二個第一個複選框的值現在罰款(真),但第二個仍然是假的是一種錯誤,但我沒有找到避免這種情況的方法。
有人知道如何避免這種情況。
不重新發明輪子,往往不是結局一個三角形;-)換句話說:你的編輯器實現是無效的。和複選框編輯器的布爾值是默認支持...只是學會正確使用它們 – kleopatra