[英]Jtable get selected row always returns -1
从昨天开始我就有问题了。 我在 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()});
}
为什么你所得到的理由-1
从getSelectedRow()
即使你似乎已经“添加了一行,”是的,因为Frontend
对象,你在呼唤checkActiveItem()
上是完全不同的Frontend
比你所看到的一个对象。
问题就在这里,在你的Timer
的run()
:
Frontend f = new Frontend();
您为每个计时器迭代创建一个新的Frontend
对象。 并且您正是在这个对象上调用checkActiveItem()
,而不是在您看到并按下按钮的前端上。 因此,不正确的输出。
作为一种解决方案,不要创建新的Frontend
,而是在您使其可见的原始前端对象上调用checkActiveItem()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.