Axiu Blog
java,swing什么的没兴趣,请默默留言之后关闭页面即可。 ### 原理 如上篇([为JTable每行按钮单独设定点击状态](https://axiu.me/coding/jtable-set-cell-button-editable-by-row/ "为JTable每行按钮单独设定点击状态"))所述,JTable在定义cell的时候,提供了rend
Hi 爱尾巴第,过年结束,苦逼的工作愉快哦。短暂的假期一睡就没了,刚准备起身看看风景就又要坐火车框迟框迟回来上班了。长假后上班不适应综合症搞的头晕脑胀眼睛疼,这几天刚刚恢复过来,然后问题也接踵而至。在愤怒修改了半天之后,稍微总结一下,如果对java,swing什么的没兴趣,请默默留言之后关闭页面即可。 ### 原理 如上篇([为JTable每行按钮单独设定点击状态](https://axiu.
Hi 爱尾巴第,过年结束,苦逼的工作愉快哦。短暂的假期一睡就没了,刚准备起身看看风景就又要坐火车框迟框迟回来上班了。长假后上班不适应综合症搞的头晕脑胀眼睛疼,这几天刚刚恢复过来,然后问题也接踵而至。在愤怒修改了半天之后,稍微总结一下,如果对java,swing什么的没兴趣,请默默留言之后关闭页面即可。 ### 原理 如上篇([为JTable每行按钮单独设定点击状态](https://axiu.
JTable中按钮的状态切换
Max

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

Comments