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

Java 在循环中创建的按钮在单击时都执行相同的操作,java,swing,jtable,jbutton,Java,Swing,Jtable,Jbutton,我目前正在尝试用Java做一些事情,使用internet上的ButtonColumn,它允许我在JTable单元格中创建可单击的按钮。但我需要制作多个按钮,每个按钮都有自己的动作参数。所以我有这个代码: DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); dtm.setNumRows(uziv.size()); int riadok = 0; for (int i = 0; i < uziv.size(); i+

我目前正在尝试用Java做一些事情,使用internet上的
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++;
}
DefaultTableModelDTM=(DefaultTableModel)jTable1.getModel();
dtm.setNumRows(uziv.size());
int-riadok=0;
对于(int i=0;i
但问题是我的
idUziv
即使它在for cyclus期间发生了变化,在我运行程序并点击任何按钮的最后,所有按钮在执行操作时都指向相同的
idUziv
。我真的不知道我还能怎么做。我需要让它像第一个按钮点击会指向
idUziv
,例如值为1,第二个按钮点击值为2,依此类推。。。你知道如何识别身份吗?或者甚至有可能吗? 非常感谢你的每一个回答

ButtonColumn col=新的ButtonColumn(jTable1,ban,4)

不能为每行创建
按钮列。类名是“…列”。编辑器用于整个列。所有行只有一个操作。因此,操作需要以常规方式编写,以便它可以适用于所有行

但我需要制作多个按钮,每个按钮都有自己的动作参数

将ID存储为TableModel的一部分。因此,您需要创建一个带有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(...) );
现在,在您的操作中,您可以从TableModel访问所选行的ID

或者另一个选项是将ID嵌入按钮列的文本中,如
TableButtonColumn
中的示例所示,这样您就可以看到“LoginID1”。然后从模型中获取文本并解析出最后一个单词

ButtonColumn col=新的ButtonColumn(jTable1,ban,4)

不能为每行创建
按钮列。类名是“…列”。编辑器用于整个列。所有行只有一个操作。因此,操作需要以常规方式编写,以便它可以适用于所有行

但我需要制作多个按钮,每个按钮都有自己的动作参数

将ID存储为TableModel的一部分。因此,您需要创建一个带有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(...) );
现在,在您的操作中,您可以从TableModel访问所选行的ID


或者另一个选项是将ID嵌入按钮列的文本中,如
TableButtonColumn
中的示例所示,这样您就可以看到“LoginID1”。然后,您只需从模型中获取文本并解析出最后一个单词。

An会非常有帮助吗?关于我写的东西,你不明白什么?我不明白是什么导致了你的bug——你也不明白。但是camickr可能有解决办法。1+
使用internet上的按钮栏,
-如在中找到的,会有很大帮助吗?关于我写的东西,你不明白什么?我不明白是什么导致了你的bug——你也不明白。但是camickr可能有解决办法。1+使用internet上的按钮栏,
-如中所示