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