【发布时间】:2021-10-27 05:50:03
【问题描述】:
我从昨天开始就有问题了。 我在 Eclipse 中使用 WindowBuilder 创建了一个 jTable,目前正在尝试使用 .getSelectedRow() 函数获取所选行的编号,但它始终返回 -1(未选择行),即使我有选择了一些东西。
这是我当前用于测试输出的代码:
public void checkActiveItem() {
System.out.println(tableBills.getSelectedRow());
}
我尝试让它通过计时器以这种方式运行,至少这似乎有效:
Timer time = new Timer();
time.schedule(new TimerTask() {
public void run() {
Frontend f = new Frontend();
f.checkActiveBill();
f.checkActiveItem();
}
}, 250, 250 );
该表当前只有一个条目,但即使是第一行也不会在选择时返回。 我可以通过单击添加来创建新行(并通过在添加按钮旁边的文本字段中输入名称来命名它们)
要创建一个新行我使用这个代码,也许有问题?
public void addBill() {
//maybe need this value somewhere else to, so let -1 and +1 as it is
int numbersOfBills = tableBills.getRowCount() - 1;
Bill newBill = new Bill(txtBillName.getText(), numbersOfBills + 1);
DefaultTableModel billModel2 = (DefaultTableModel) tableBills.getModel();
int billNb = numbersOfBills + 1;
billModel2.addRow(new Object[] {newBill.getBillNr(),newBill.getBillName(), newBill.getItemsInBill()});
}
【问题讨论】:
-
在计时器的每次迭代中创建
new Frontend()s,对我来说似乎是个问题。所以你总是在你新创建的前端调用checkActiveItem()。但是由于您没有发布minimal reproducible example,我无法进一步帮助您。 -
函数 addBill() 在按钮按下时被调用。只有 checkActiveBill() 和 getSelectedRow() 函数将每 250 毫秒调用一次,所以我不会永久更改我的前端。
-
"我不会永久更改我的前端。" - 是的,你是。不是可见的,而是您正在调用方法的那个。查看计时器中的代码:
Frontend f = new Frontend()checkActiveItem() 的对象。但是,这不是您看到并按下按钮的那个。所以这是一个完全不同的前端,它没有添加任何行。但同样,这是我所能做的,所以请提供minimal reproducible example。 -
你是对的,它们是前端的不同对象。我完全错过了。谢谢,我能够解决问题,您可以将其发布为答案。代码现在有效。