簡體   English   中英

Jtable 獲取選定行總是返回 -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 );

該表目前只有一個條目,但即使是第一行也不會在選擇時返回。 我可以通過單擊添加來創建新行(並通過在之前添加按鈕旁邊的文本字段中輸入名稱來命名它們)

在此處輸入圖片說明

在此處輸入圖片說明

要創建一個新行,我使用此代碼,也許有問題?

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()});
    }

為什么你所得到的理由-1getSelectedRow()即使你似乎已經“添加了一行,”是的,因為Frontend對象,你在呼喚checkActiveItem()上是完全不同的Frontend比你所看到的一個對象。

問題就在這里,在你的Timerrun()

Frontend f = new Frontend();

您為每個計時器迭代創建一個新的Frontend對象。 並且您正是在這個對象上調用checkActiveItem() ,而不是在您看到並按下按鈕的前端上。 因此,不正確的輸出。

作為一種解決方案,不要創建新的Frontend ,而是在您使其可見的原始前端對象上調用checkActiveItem()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM