gpt4 book ai didi

java - 使用 JButton 的 actionListener 向 JTable 添加行

转载 作者:行者123 更新时间:2023-12-01 15:20:52 25 4
gpt4 key购买 nike

以下是我尝试添加创建 JButton 的代码,该代码将向连接的 JTable 添加一行。

我的变量如下所示,表和 tbm 已创建,但在当前未显示的程序的另一部分中初始化。这些都是实例变量。

int currentUser = 0;
JTable[] tables = new JTable[5];
DefaultTableModel[] tbm = new DefaultTableModel[5];
JButton[] addRow = new JButton[5]

这是使用 Action 监听器创建 JButton 的代码。

for(int i=0;i<tbm.length;i++) {
addRow[i] = new JButton("Add Row");
selectionModel = tables[i].getSelectionModel();
currentUser=i;
addRow[i].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
Object[] temp = {"",""};
tbm[currentUser].addRow(temp);
selectionModel.setSelectionInterval(tbm[currentUser].getRowCount()-1,tbm[currentUser].getRowCount()-1);
}});
}

后来,我使用从 0-tables.length 运行的 for 循环将 JTable 和 JButton 组装到 JPanel 中,并将其放入相应的 JFrame 中。这里的问题是,当我按下按钮时,会触发错误的actionListener。例如,在第 0 帧中按“添加行”应该会触发 addRow[0],但实际上会触发 addRow[4]。

最佳答案

您要向表中 tables[currentUser] 添加一行每当单击任何按钮时。听起来您想向 table[X] 添加一行当您单击按钮 X 时。以下是快速但肮脏的方法:

for(int i=0;i<tbm.length;i++) {
final int tblIdx = i;
addRow[i] = new JButton("Add Row");
selectionModel = tables[i].getSelectionModel();
currentUser=i;
addRow[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object[] temp = {"",""};
tbm[tblIdx].addRow(temp);
selectionModel.setSelectionInterval(tbm[tblIdx].getRowCount()-1,tbm[tblIdx].getRowCount()-1);
}
});
}

您无法通过 i直接进入您的匿名ActionListener因为它不是最终变量,所以在循环的每次迭代开始时有一个临时最终变量 tblIdx创建并设置为任何 i目前是。

我个人会通过子类化 ActionListener 来实现这一点并将表索引作为参数传递给构造函数,但这只是我的想法。

关于java - 使用 JButton 的 actionListener 向 JTable 添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com