Java jTable中的jButton不可单击

Java jTable中的jButton不可单击,java,swing,jtable,jbutton,Java,Swing,Jtable,Jbutton,我的问题是,我不能点击按钮。它们的行为就像是带有按钮设计的文本字段 我的Main: tableModStudents = (DefaultTableModel) studentsTable.getModel(); studentsTable.getColumn(studentsTable.getColumnName(8)) .setCellRenderer(new JButtonRenderer()); studentsTable.get

我的问题是,我不能点击按钮。它们的行为就像是带有按钮设计的文本字段

我的
Main

    tableModStudents = (DefaultTableModel) studentsTable.getModel();
    studentsTable.getColumn(studentsTable.getColumnName(8))
                 .setCellRenderer(new JButtonRenderer());
    studentsTable.getColumn(studentsTable.getColumnName(8))
                 .setCellEditor(new JButtonEditor());
my
CellRenderer

public class JButtonRenderer implements TableCellRenderer {    
    private JButton button = new JButton();

    public Component getTableCellRendererComponent(JTable table,
            Object buttonText, boolean isSelected, boolean hasFocus, 
            int row, int column) {
        table.setShowGrid(true);
        button.setText("Details");
        button.setToolTipText(buttonText.toString());
        return button;
    }
}
my
CellEditor

    public class JButtonEditor extends AbstractCellEditor implements TableCellEditor {

    private JButton button;
    private String txt;

    public JButtonEditor() {
        super();
        button = new JButton();
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Button gedrückt!");
            }
        });
    }

    public Object getCellEditorValue() {
        return null;
    }

    public boolean isCellEditable(EventObject anEvent) {
        return true;
    }

    public boolean shouldSelectCell(EventObject anEvent) {
        return false;
    }

    public boolean stopCellEditing() {
        return super.stopCellEditing();
    }

    public void cancelCellEditing() {
    }

    public void addCellEditorListener(CellEditorListener l) {
    }

    public void removeCellEditorListener(CellEditorListener l) {
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        txt = (value == null) ? "" : value.toString();
        button.setText(txt);
        return button;
    }
}
你能找到问题所在吗?它让我疯狂

非常感谢:)

退房

它将按钮渲染器和编辑器组合在一个类中


您所需要做的就是提供自定义
操作
,以便在调用按钮时调用(通过单击按钮或调用其助记符)。

这上面有一些指向解决方案的链接。太棒了!好极了,轻松