-------------------
|    |  A  |      |
-------------------
|    |     |      |
-------------------  
假设上面这是一个2*3的表格,现在对中间这列加上了一个CellEditor。当鼠标点击除A cell外的其它地方时,调用方法tableModel.setValue("aa",0,1),这时A cell的值会改变;但鼠标点中A cell的时候,再调用tableModel.setValue("aa",0,1),此时A cell的值不会改变。这是为什么呢?CellEditor的代码如下: private class MyTableEditor extends AbstractCellEditor implements TableCellEditor,TableCellRenderer {
private ButtonLabelPanel panel = new ButtonLabelPanel();
private ButtonLabelPanel renderPanel = new ButtonLabelPanel();
private String text;

public MyTableEditor() {
super();
initListener();
}

private void initListener() {
panel.getButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
actionButton();
}});
} public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
text = (String)value;
panel.getLabel().setText(text);
panel.setBackground(table.getSelectionBackground());
return panel;
} public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
String text = (String)value;
renderPanel.getLabel().setText(text);
if (isSelected) {
renderPanel.setBackground(table.getSelectionBackground());
} else {
renderPanel.setBackground(Color.WHITE);
}
renderPanel.setToolTipText(text);
return renderPanel;
} public Object getCellEditorValue() {
return text;
}
}

解决方案 »

  1.   

    和http://topic.csdn.net/t/20050114/09/3724520.html#Top这篇帖子出现的问题几乎完全一样。也是调整cell宽度时会就好了。
      

  2.   

    搞定了,需要在tableModel.setValue("aa",0,1)之前将对应的cell的CellEditor进行stopCellEditing()操作。
    分全部送给3楼的同学哈
      

  3.   

    自定义的Renderer、Editor很容易就出现焦点失去时,没有StopEdit的情况。至于是调用stopEdit还是cancelEdit,还得看情况了