在循环中创建的按钮在单击时都执行相同的操作

Buttons created in a loop are all doing the same thing when clicked

我目前正尝试在 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 即使它在 for cyclus 期间发生变化,最后当我 运行 我的程序并单击任何按钮时,所有按钮都指向相同的 idUziv 当他们的动作被执行时。而且我真的不知道我还能怎么做。我需要让它像第一个按钮点击会指向 idUziv 与值 1 例如,第二个与值 2 等等......你知道如何识别吗?或者有可能吗? 非常感谢您的每一个回答

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

您不能为每一行创建一个 ButtonColumn。 class 名称是“...列”。编辑器是针对整个专栏的。所有行只有一个操作。因此需要通用地编写 Action,以便它适用于所有行。

But I am in need to make multiple buttons and for each button specified it´s own parameter for its action.

将 ID 存储为 TableModel 的一部分。所以你需要创建一个table,其中包含一个ID列,然后在将数据加载到TableModel时设置id:

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(...) );

现在,在您的 Action 中,您可以访问所选行的 TableModel 中的 ID。

或者另一种选择是将 ID 嵌入按钮列的文本中,如 TableButtonColumn 中的示例所示,以便您看到 "Login ID1"。然后你只需从模型中获取文本并解析出最后一个词。