我有一个JTable
自定义渲染器。当单击 中的一个项目时JTable
,我会执行一组影响我的模型的特定操作。我有两种选择来实现这一点:
ListSelectionListener
:我在我的整体上添加了一个侦听器,JTable
当单击一行时触发。然后我执行动作。
- 优点:允许我选择行的任何部分(在我的情况下不是必需的),可能是 Swing打算让事件在
JTable
- 缺点:我必须创建一个自定义类来处理这个并重现代码。
例子:
class Selector implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent event) {
// ... write the action code here
}
}
JButton & Action
:我渲染一个JButton
并添加Action
一个JButton
。
- 优点:我可以重复使用它
Action
,如果我改变它Action
,所有使用它的实例都会被更新。 - 缺点:我将逻辑移动到我的渲染代码中。
例子:
class Renderer implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
JButton btn = new JButton(value.toString());
btn.setAction(new SpecificAction());
return btn;
}
}
如果我使用第二种方案,会不会有火从天而降?
它们是否同样可行?
有什么方法可以
Action
在 a 中使用 sListSelectionListener
吗?