Java 将JTable单元格与操作关联

Java 将JTable单元格与操作关联,java,swing,user-interface,jtable,cell,Java,Swing,User Interface,Jtable,Cell,在JTable中,我将jbutton作为表单元格。每个特定按钮应启动不同的操作。我该怎么做?行动由我定义 谢谢大家! 您是否考虑过将动作添加到渲染器内的按钮中 public class MyRenderer implements TableCellRenderer { public Component getTableCellRendererComponent( JTable table, Object color, boolean isSelecte

在JTable中,我将jbutton作为表单元格。每个特定按钮应启动不同的操作。我该怎么做?行动由我定义


谢谢大家!

您是否考虑过将动作添加到渲染器内的按钮中

public class MyRenderer implements TableCellRenderer {


    public Component getTableCellRendererComponent(
        JTable table, Object color,
        boolean isSelected, boolean hasFocus,
        int row, int column) {

        if (some_condition) {

            JButotn b1 = new JButton('A')

            b1.addActionListener(new ActionListener() {
                actionPerformed(ActionEvent e) {
                    //do stuff
                }
            }

            return b1;
        }else if (some__other_condition) {
            JButotn b2 = new JButton('B')

            b2.addActionListener(new ActionListener() {
                actionPerformed(ActionEvent e) {
                    //do stuff
                }
            }

            return b2;
        }
    }
}

从性能角度看,这可能不是最正确的方法,但在不了解更多应用程序的情况下,我也无能为力。

你读过TableCellEditor吗?你是如何在单元格中放置按钮的?使用渲染器?这通常不是表的工作方式。奥利弗·沃特金斯:是的,有一个渲染器:我使用了一种方法将一个按钮与一个动作关联起来,但是由于按钮被视为一个表格单元格,当按钮被点击时不会发生任何事情…-1,你永远不会使用渲染器来实现这一点。渲染器用于渲染单元。当Swing确定需要绘制单元格时,将调用渲染器。例如,选择行或取消选择行时,需要绘制单元格。因此,您无法控制何时调用此方法。渲染器不是真正的组件,因此即使使用按钮渲染单元格,也不能仅向其添加ActionListener。这种类型的功能由编辑器提供,因为编辑器由用户调用。您可以争辩说按钮不应属于渲染器或编辑器,因为按钮并不代表单元格状态或值的变化。另一方面,文本字段、复选框或日期选择器可以更改值。按钮不属于这两个类别中的任何一个。