Jtable 始终获取选定行 returns -1
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 );
table 目前只有一个条目,但即使是第一行也不会在选择时返回。
我可以通过单击添加来创建新行(并通过在之前添加按钮旁边的文本字段中输入名称来命名它们)
我使用这段代码创建一个新行,可能有问题吗?
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()});
}
尽管您似乎“添加了一行”,但您从 getSelectedRow()
得到 -1
的原因是,因为您调用的 Frontend
对象 checkActiveItem()
上是一个与您看到的完全不同的 Frontend
对象。
问题出在这里,在您的 Timer
中 run()
:
Frontend f = new Frontend();
您为每个计时器迭代创建一个新的 Frontend
对象。您正是在这个对象上调用 checkActiveItem()
,而不是在您看到并按下按钮的前端。因此,输出不正确。
作为解决方案,不要创建新的 Frontend
,而是在您设置为可见的原始前端对象上调用 checkActiveItem()
。
我从昨天开始就有问题了。 我在 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 );
table 目前只有一个条目,但即使是第一行也不会在选择时返回。 我可以通过单击添加来创建新行(并通过在之前添加按钮旁边的文本字段中输入名称来命名它们)
我使用这段代码创建一个新行,可能有问题吗?
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()});
}
尽管您似乎“添加了一行”,但您从 getSelectedRow()
得到 -1
的原因是,因为您调用的 Frontend
对象 checkActiveItem()
上是一个与您看到的完全不同的 Frontend
对象。
问题出在这里,在您的 Timer
中 run()
:
Frontend f = new Frontend();
您为每个计时器迭代创建一个新的 Frontend
对象。您正是在这个对象上调用 checkActiveItem()
,而不是在您看到并按下按钮的前端。因此,输出不正确。
作为解决方案,不要创建新的 Frontend
,而是在您设置为可见的原始前端对象上调用 checkActiveItem()
。