我有一个JButton的自定义单元格渲染器和编辑器。我的问题是,如果我点击一个按钮,相应的行就不会被选中。
这是必需的,因为按钮的ActionListener需要获取所点击行的信息。
如何实现此行为?
编辑:
我有一个包含JTable
和DefaultListModel
的课程。该表每行可视化一个Object。此外,每行包含使用下面的ButtonColumn
实现的修改和删除按钮。行本身不包含实际数据 - 它只包含纯字符串。如果我现在点击Modify-或Delete-Button我想在真实对象上做一些事情(存储在interal 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;
}
}
答案 0 :(得分:-1)
我通过在我的ButtomCellRenderer / Editor中添加另一个自定义MouseListener
来修复它,这是在表类中实现的。
@Override
public void mousePressed(MouseEvent e)
{
clickedRowIndex = table.rowAtPoint(e.getPoint());
}
如果点击ButtonCell
,我可以获取点击单元格的信息,并可以actionPerformed
方法使用此信息。