Java 为什么同一个类中的getSelectedRow()会给出正确的值,而在另一个类中,即使选中了一行,它也会给出-1?

Java 为什么同一个类中的getSelectedRow()会给出正确的值,而在另一个类中,即使选中了一行,它也会给出-1?,java,swing,Java,Swing,为什么在同一个类中调用getSelectedRow()时返回正确的值,但在另一个类中尝试调用该方法时,即使选择了一行,也返回-1 例如,我有一个这样的方法 public int getSelectedRow(){ int row = drinksTable.getSelectedRow(); System.out.println(row); return row; } 我有一个jframe类a和一个类B,其中包含购买、删除、编辑等

为什么在同一个类中调用
getSelectedRow()
时返回正确的值,但在另一个类中尝试调用该方法时,即使选择了一行,也返回-1

例如,我有一个这样的方法

    public int getSelectedRow(){
        int row = drinksTable.getSelectedRow();
        System.out.println(row);
        return row;
    }
我有一个jframe类a和一个类B,其中包含购买、删除、编辑等所有功能。我需要知道选择了哪一行,以便我购买、删除、编辑正确的记录。上述代码位于A类中。问题是,如果我尝试在B类中调用上述方法,返回的行总是-1,这意味着没有选择行,即使它在表中清楚地显示高亮显示并选择了一行。如果我尝试在同一个类中调用该方法,它将返回正确的值。这里有什么问题

例如,这里的类A称为自动售货机。我在班上有一个这样的方法。我使用方法的部分在上半部分,声明发生在那里。由于我希望值根据所选行进行更改,因此
selectedRow
getValueAt(selectedRow,1)
中类似这样

   public static void purchaseDrink(String editTerm, String oldAmount, String newAmount, String filepath){
        VendingMachine vm = new VendingMachine();
        int selectedRow = vm.getSelectedRow();
        String tempFile = "temp.txt";
        File oldFile = new File(filepath);
        File newFile = new File(tempFile);
        String drinkName = vm.model.getValueAt(selectedRow, 1).toString();
        String price = vm.model.getValueAt(selectedRow, 2).toString();
        String drinkQuantity = vm.model.getValueAt(selectedRow, 3).toString();
        String line;

        try {
            FileWriter fw = new FileWriter(tempFile, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);
            BufferedReader br = new BufferedReader(new FileReader("drinks.txt"));

            while((line = br.readLine()) != null){
                if (drinkName.equals(editTerm)) {
                   line = line.replace(oldAmount, newAmount);
                   pw.println(line);
               } else {
                   pw.println(line);
                   System.out.println(selectedRow);
               }               
            }

            br.close();
            pw.flush();
            pw.close();
            oldFile.delete();
            File dump = new File(filepath);
            newFile.renameTo(dump);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Failed to edit", "Edit failed", JOptionPane.INFORMATION_MESSAGE);
        }
    }
编辑

A类=自动售货机

B类=饮料

所以我在谷歌上搜索了abit,找到了如何将类A的对象传递给类B,并使用下面的代码完成了这项工作

    private VendingMachine vm;
    public Drinks(VendingMachine vm) {
        this.vm = vm;
    }
然后在按钮中调用该方法,如下所示:

   VendingMachine vm = new VendingMachine();
   Drinks drinks = new Drinks(vm);
   drinks.purchaseDrink(...);


但是
selectedRow()
方法仍然返回-1,而不是所选的行。我遗漏了什么???

您可以在中上载完整的代码github@AlejandroGonzalez:这不是问题的重点,这里的问题应该是独立的。如果你想让自己做额外的工作,请随意,但请不要鼓励这样做。@kian:正如camickr所想的那样:你正在调用
getSelectedRow()
一个新的
VendingMachine
实例。这不是当前显示的那个。您需要以某种方式将显示给需要它的代码的
自动售货机
实例传递给它(作为参数,或在构造过程中)。@kian您不应该使用静态方法。代码的整个结构都是错误的。我们无能为力。您需要重新构造整个代码。所以我的建议是重新开始。阅读上的Swing教程中的部分。下载“ListDemo”代码并对其进行测试,了解其工作原理,以便您可以在ActionListener中引用JList。然后修改工作代码以满足您的要求。这就是从工作代码开始并进行更改。根据提供的代码,我不可能猜到您的代码在做什么。您已获得一个指向工作示例的链接。从一个工作示例开始,进行更改。那就是忘记你的应用程序,先学习“概念”。如果你需要帮助,就贴一张合适的卡片。