2017-05-06 26 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

相关问题