Java 表格单元格中的按钮可以';别着急

Java 表格单元格中的按钮可以';别着急,java,swing,jtable,jbutton,Java,Swing,Jtable,Jbutton,我正在使用JavaSwing创建一个带有按钮的表,这些按钮可以用作基于行的操作 我正在使用自定义单元格渲染器尝试渲染表格单元格中的多个按钮。我已经设法拼凑了一些东西,在视觉上实现了我想要的功能,但是按钮实际上不起作用。它们不会开火,也不会对点击或鼠标悬停做出视觉反应。寻找一种方法使按钮做出反应,并实际触发它们的动作 单元渲染器类: 公共类按钮cell扩展AbstractCellEditor实现TableCellEditor、TableCellRenderer{ JPanel小组; 公共按钮单元格

我正在使用JavaSwing创建一个带有按钮的表,这些按钮可以用作基于行的操作

我正在使用自定义单元格渲染器尝试渲染表格单元格中的多个按钮。我已经设法拼凑了一些东西,在视觉上实现了我想要的功能,但是按钮实际上不起作用。它们不会开火,也不会对点击或鼠标悬停做出视觉反应。寻找一种方法使按钮做出反应,并实际触发它们的动作

单元渲染器类:

公共类按钮cell扩展AbstractCellEditor实现TableCellEditor、TableCellRenderer{
JPanel小组;
公共按钮单元格(){
this.updateData(Collections.emptyList());
}
私有void updateData(列表按钮){
this.panel=newjpanel(newflowlayout(FlowLayout.CENTER,0,0));
用于(JButton按钮:按钮){
设置边距(新插图(-2,0,-2,0));
此.panel.add(按钮);
}
}
私有void updateData(列表按钮、布尔isSelected、JTable表){
此.updateData(按钮);
如果(当选){
this.panel.setBackground(table.getSelectionBackground());
}否则{
this.panel.setBackground(table.getBackground());
}
}
公共组件getTableCellEditorComponent(JTable表、对象值、,
布尔值(选定,int行,int列){
此.updateData((列表)值,isSelected,table);
返回面板;
}
公共对象getCellEditorValue(){
返回null;
}
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
此.updateData((列表)值,isSelected,table);
返回面板;
}
}
从视觉上看,这会产生:


此.updateData((列表)值,isSelected,table)我的第一个想法是,按钮(或任何其他组件)不应该是模型的一部分,但我希望它包含上述按钮,我设计的渲染器就是这样做的。这里有一个这样做的指南,还有其他元素:组件不属于模型,数据属于模型。渲染器/编辑器然后决定如何将数据呈现给用户-没有冒犯,但这是大多数语言中使用的一个非常基本的概念。甚至你的指南也没有这样做——它从模型中获取“数据”,然后以一种它认为合适的方式呈现。这种设计对于web UI来说是合适的(当然,是必要的),但是在桌面应用程序中,有更好的方法来实现这一点。考虑到只有一个
E
按钮和一个
D
按钮,位于JTable外部,当按下按钮时,它们将作用于选中的表中的任何行。有时,带有按钮的表是正确的选择。我们遇到的问题是用于绘制和编辑
JTable
单元格的Swing魔法。要了解如何让点击生效的提示,请查看
DefaultCellEditor
的源代码,并查看组件如何确定是否应处理鼠标点击。复选框和组合框在JTables中一直使用,它们都需要这种单击激活行为。