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

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

被折叠的 条评论
为什么被折叠?



