У меня есть пользовательский рендерер и редактор ячеек 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;
}
}