Кнопки в ячейке таблицы не могут быть нажаты - PullRequest
0 голосов
/ 25 сентября 2019

Я использую Java Swing для создания таблицы с кнопками, которые я могу использовать для действий, основанных на строке.

Я использую пользовательский рендерер ячеек, чтобы попытаться отобразить несколько кнопок в ячейке таблицы.Мне удалось собрать воедино то, что делает то, что я хочу визуально, но кнопки на самом деле не работают.Они просто не стреляют и не реагируют визуально на щелчки или наведение мыши.Ищите способ заставить кнопки реагировать и фактически запускать их действия.

Класс визуализации ячейки:

public class ButtonsCell extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
    JPanel panel;

    public ButtonsCell() {
        this.updateData(Collections.emptyList());
    }

    private void updateData(List<JButton> buttons) {
        this.panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));


        for(JButton button : buttons) {
            button.setMargin(new Insets(-2, 0, -2, 0));

            this.panel.add(button);
        }
    }

    private void updateData(List<JButton> buttons, boolean isSelected, JTable table) {
        this.updateData(buttons);

        if (isSelected) {
            this.panel.setBackground(table.getSelectionBackground());
        }else{
            this.panel.setBackground(table.getBackground());
        }
    }

    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row, int column) {
        this.updateData((List<JButton>)value, isSelected, table);
        return panel;
    }

    public Object getCellEditorValue() {
        return null;
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected, boolean hasFocus, int row, int column) {
        this.updateData((List<JButton>)value, isSelected, table);
        return panel;
    }
}

Визуально, это производит:

enter image description here

...