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中按钮的编辑状态,特别是在选中按钮时,也可以改变按钮状态。