2012-01-07 124 views
0

我有一個JButton的自定義單元格渲染器和編輯器。我的問題是,如果我點擊一個按鈕,相應的行不會被選中。ButtonCellEditor不選擇Jtable的行

這是必要的,因爲按鈕的ActionListener需要獲取點擊行的信息。

我該如何實現這種行爲?

編輯:

我有一個包含一個JTableDefaultListModel組合的類。該表可視化每行對象。此外,每行還包含一個修改和刪除按鈕,這些按鈕通過下面的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; 
    } 
} 
+0

a)在代碼中聽起來有點不對勁b)聽起來很腥,你需要選中的行作爲傳入getTableCellEditorComponent(... _row_ ..)中的編輯器的行 – kleopatra 2012-01-09 12:50:46

回答

-1

我通過添加其他自定義MouseListener我ButtomCellRenderer /編輯器,在表類實現固定它。

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

在那裏,我可以得到,如果我點擊一個ButtonCell並且可以使用在actionPerformed方法這些信息,這樣的細胞被點擊的信息。

+1

這似乎很迂迴。這[教程示例](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editor)顯示了標準方法。你能詳細說明嗎? – trashgod 2012-01-09 01:09:23

+0

這個「修復」最有可能就是隱藏你的代碼的更深層的問題。現在比現在更好地深入研究真正的問題:-) – kleopatra 2012-01-09 12:52:26

+1

我編輯了這個問題 - 我的問題是我沒有在JTable中存儲實際的對象,只有普通的數據。 – Razer 2012-01-10 10:02:47