ButtonCellEditor не выбирает строку Jtable - PullRequest
0 голосов
/ 08 января 2012

У меня есть пользовательский рендерер и редактор ячеек JButton.Моя проблема в том, что если я нажимаю на кнопку, соответствующая строка не выбирается.

Это необходимо, потому что ActionListener кнопки должен получить информацию о нажатой строке.

Какя могу реализовать это поведение?

Редактировать:

У меня есть класс, который содержит JTable в сочетании с DefaultListModel.Эта таблица визуализирует Объект в каждой строке.Кроме того, каждая строка содержит кнопку «Изменить» и «Удалить», реализованную с помощью ButtonColumn ниже.Сама строка не содержит реальных данных - она ​​содержит только простые строки.Если я сейчас нажму на кнопку «Изменить» или «Удалить», я хочу что-то сделать с реальным объектом (который хранится в целых числах ArrayList) - поэтому мне нужна информация, в какой строке нажата кнопка.

class ButtonColumn extends AbstractCellEditor implements TableCellRenderer,
                                                         TableCellEditor
{
    private JButton btRenderer = new JButton();
    private JButton btEdit     = new JButton();
    private String text;

    public ButtonColumn(ActionListener listener, String actionCommand)
    {
        btEdit.setFocusPainted(false);
        btEdit.addActionListener(listener);
        btEdit.setActionCommand(actionCommand);
    }

    public void addMouseListener(MouseListener listener)
    {
        btEdit.addMouseListener(listener);
    }

    @Override
    public Component getTableCellRendererComponent(JTable table,
                                                Object value,
                                                boolean isSelected,
                                                boolean hasFocus,
                                                int row,
                                                int column)
    {
        btRenderer.setText((value == null) ? "" : value.toString());
        return btRenderer;
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
                                                Object value,
                                                boolean isSelected,
                                                int row,
                                                int column)
    {
        text = (value == null) ? "" : value.toString();
        btEdit.setText(text);
        return btEdit;
    }

    @Override
    public Object getCellEditorValue()
    {
        return text;
    }
}

1 Ответ

0 голосов
/ 08 января 2012

Я исправил это, добавив еще один пользовательский MouseListener в мой ButtomCellRenderer / Editor, который реализован в классе таблицы.

@Override
public void mousePressed(MouseEvent e)
{
    clickedRowIndex = table.rowAtPoint(e.getPoint());
}

Там я могу получить информацию о том, по какой ячейке щелкают, если я нажму ButtonCell, и могу использовать эту информацию в методе actionPerformed.

...