我有一個JButton的自定義單元格渲染器和編輯器。我的問題是,如果我點擊一個按鈕,相應的行不會被選中。ButtonCellEditor不選擇Jtable的行
這是必要的,因爲按鈕的ActionListener需要獲取點擊行的信息。
我該如何實現這種行爲?
編輯:
我有一個包含一個JTable
與DefaultListModel
組合的類。該表可視化每行對象。此外,每行還包含一個修改和刪除按鈕,這些按鈕通過下面的ButtonColumn
實現。該行本身不包含真實數據 - 它只包含普通的字符串。如果我現在單擊Modify-或Delete-Button,我想對真實對象(存儲在內部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;
}
}
a)在代碼中聽起來有點不對勁b)聽起來很腥,你需要選中的行作爲傳入getTableCellEditorComponent(... _row_ ..)中的編輯器的行 – kleopatra 2012-01-09 12:50:46