IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    JTable中按钮的状态切换

    axiu发表于 2015-03-04 05:52:19
    love 0

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

    转载请注明来源:JTable中按钮的状态切换
    本文链接地址:http://axiu.me/coding/jtable-button-state-switch/


沪ICP备19023445号-2号
友情链接