2017-05-06 72 views
0

我目前正試圖做一些在Java中的東西,從互聯網使用ButtonColumn,它允許我在JTable單元格內創建可點擊的按鈕。但我需要製作多個按鈕,並且爲每個按鈕指定它的操作參數。所以我有這樣的代碼:在循環中創建的按鈕都點擊時做同樣的事情

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); 
dtm.setNumRows(uziv.size()); 
int riadok = 0; 

for (int i = 0; i < uziv.size(); i++) { 
    jTable1.setValueAt(uziv.get(i).getMeno(), riadok, 0); 
    jTable1.setValueAt(uziv.get(i).getPriezvisko(), riadok, 1); 
    jTable1.setValueAt(uziv.get(i).getEmail(), riadok, 2); 
    jTable1.setValueAt(uziv.get(i).getLogin(), riadok, 3); 
    int idUz = uziv.get(i).getId(); 

    Action ban = new AbstractAction() { 
     public void actionPerformed(ActionEvent e) { 
      DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); 
      int modelRow = Integer.valueOf(e.getActionCommand()); 
      db.zabanujUzivatela(db.selectId(idUz)); 
     } 
    }; 

    ButtonColumn col = new ButtonColumn(jTable1, ban, 4);  
    riadok++; 
} 

但問題是,我的idUziv甚至it's當我運行了一個程序,點擊任何按鈕,所有按鈕都指向上時的cyclus改變,在結束當他們的行爲被執行時相同的idUziv。我真的不知道我該怎麼做。我需要使它像第一個按鈕點擊將指向idUziv與價值1例如,第二與價值2等等...你有任何想法如何id?或者甚至有可能? 非常感謝您的每一個回答

+0

一個[mcve]會幫助很大 –

+0

爲什麼?你不明白我寫的是什麼? – eraz

+0

我不明白是什麼導致你的錯誤 - 你也不是。 –

回答

4

ButtonColumn col = new ButtonColumn(jTable1,ban,4);

您無法爲每一行創建一個ButtonColumn。類名稱是「... Column」。編輯是爲整個專欄。所有行只有一個Action。因此,Action需要一般性地編寫,因此它可以適用於所有行。

但我需要製作多個按鈕,併爲每個按鈕指定它的行爲自己的參數。

將ID存儲爲TableModel的一部分。所以,你需要創建一個表格,表格中的ID列,然後設置ID當您將數據加載到的TableModel:

jTable1.setValueAt(uziv.get(i).getLogin(), riadok, 3); 
//int idUz = uziv.get(i).getId(); 
jTable1.setValueAt(uziv.get(i).getId(), riadok, 4); 

然後你可以從JTable中移除的TableColumn所以列是不可見的:

table.removeColumn(table.getColumn(...)); 

現在在您的操作中,您可以從TableModel中爲選定行訪問ID。

或者另一種選擇是在按鈕列的文本中嵌入ID,如TableButtonColumn中的示例所示,以便您看到「登錄ID1」。然後,您只需從模型中獲取文本並解析出最後一個單詞。

+0

非常感謝這個人工作:) – eraz

相關問題