Hi 爱尾巴第,过年结束,苦逼的工作愉快哦。短暂的假期一睡就没了,刚准备起身看看风景就又要坐火车框迟框迟回来上班了。长假后上班不适应综合症搞的头晕脑胀眼睛疼,这几天刚刚恢复过来,然后问题也接踵而至。在愤怒修改了半天之后,稍微总结一下,如果对java,swing什么的没兴趣,请默默留言之后关闭页面即可。
原理
如上篇(为JTable每行按钮单独设定点击状态)所述,JTable在定义cell的时候,提供了render和editor两个类供继承。前者负责普通状态,后者负责编辑状态(editable为true时有效)。
这两个类分别有接口来负责状态的展示:
TableCellEditor
getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
TableCellRenderer
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
所以只要修改这两个,就可以控制cell的普通状态展示和编辑状态展示了。
同时,
TableCellEditor继承自CellEdiotor,该类提供了几个接口,来更改cell的编辑状态,可以通过stopCellEditing()来关闭该cell的可编辑状态。代码实现
具体到按钮状态的切换,就需要改变下面两个地方:
1.TableCellRenderer
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
...
JButton btn = (JButton)value;
btn.setEnabled(btn.isEnabled());
...
}
在一般状态时,供获取按钮使用。
2.AbstractCellEditor
public class selfEditor extends AbstractCellEditor implements
TableCellEditor, ActionListener {
...
@Override
public void actionPerformed(ActionEvent e) {
...
// 介个table就是你这里使用的talbe
table.getCellEditor().stopCellEditing();
...
}
}
stopCellEditing用于停止table中按钮的编辑状态,特别是在选中按钮时,也可以改变按钮状态。