Swing编程 — JTable遇到的坑和总结

本文分享了在使用Swing的JTable时遇到的问题及解决方案,包括如何正确设置单元格背景颜色、优雅地结合TableCellRenderer与TableCellEditor以及解决单元格内容不更新等问题。

Swing编程 — JTable遇到的坑和经验总结

1. TableCellRender 无法设置背景颜色

在使用 自定义的TableCellRender 渲染Jtable页面,结果死活设置不上颜色,导致界面会产生一种无法点击的错觉,结果发现 是因为CellRender 继承的是 JComponent, 给JComoponent 和他的子组件 设置背景颜色都会不起作用

2. TableCellRender 和 CellEditor 比较优雅的使用方式 (个人认为)

JTable的界面展示分工是特别明确的。

之前我一直想用 TableCellRender 来展示 JButton 并完成点击事件,结果毛用没有,按钮根本点击不了。

原因是,当你点击的时候,如果该列是可以被编辑的,Jtable会把界面切换到 Editor界面让你点击。
如果你没有设置Editor,他会显示默认的Editor(也就是一个JTextField 编辑框或者一个JCheckBox)。如果你设置该列的Eiditor, swing不会给render分发任何的事件

后来发现了需要Editor和Render配合使用才能达到编辑的效果,所以总结了下面的一个比较方便的使用方式,注意:这种使用方式只适用于Editor和Render界面一致的情况,不过我认为大部分的设计它们都是一致的,因为不一致不符合所见即所得,增加用户的理解和使用成本。

这种方式的核心就是,Editor复用Render的Ui
既然Render已经完成了界面的展示,那么直接复用是最方便的,下面是示例,下面的Cell展示了四个按钮,分别是启动,配置,删除和定位。添加Editor的目的就是为了能让他们响应点击事件。你会发现如果仅仅使用Render展示,按钮是无法点击的,因为能响应事件的是Editor而不是Render

在这里插入图片描述

Render代码

@Getter
public class CheckItemOptionTableCellRender extends JToolBar implements TableCellRenderer {
   
   

    protected final JButton startOrKillButton = new JButton();
    protected final JButton settingButton = new JButton(UiUtil.getSvgIcon("icon/setting_filled.svg", 16));
    protected final JButton deleteButton = new JButton(UiUtil.getSvgIcon("icon/delete-fill.svg", 16));
    protected final JButton positionButton = new JButton(UiUtil.getSvgIcon("icon/position.svg", 16));

    public CheckItemOptionTableCellRender() {
   
   
        setBorder(new EmptyBorder(0, 10, 0, 10));
        setOrientation(HORIZONTAL);
        add(startOrKillButton
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值