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 对象。

问题出在这里,在您的 Timerrun():

Frontend f = new Frontend();

您为每个计时器迭代创建一个新的 Frontend 对象。您正是在这个对象上调用 checkActiveItem(),而不是在您看到并按下按钮的前端。因此,输出不正确。

作为解决方案,不要创建新的 Frontend,而是在您设置为可见的原始前端对象上调用 checkActiveItem()