從昨天開始我就有問題了。我在 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()});
}
uj5u.com熱心網友回復:
即使您似乎“添加了一行”,您仍然-1從中獲取的原因getSelectedRow()是,因為Frontend您正在呼叫的物件與您所看到的物件checkActiveItem()完全不同Frontend。
問題就在這里,在你的Timers里面run():
Frontend f = new Frontend();
您Frontend為每次計時器迭代創建一個新物件。并且您checkActiveItem()完全呼叫這個物件,而不是在您看到并按下按鈕的前端。因此,不正確的輸出。
作為解決方案,不要創建新的Frontends,而是呼叫checkActiveItem()您使可見的原始前端物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343765.html
