Почему getSelectedRow () в том же классе дает правильное значение, но в другом классе вместо этого дает -1, даже если выбрана строка? - PullRequest
0 голосов
/ 20 марта 2020

Почему, когда я вызываю getSelectedRow() в том же классе, он возвращает правильное значение, но когда я пытаюсь вызвать метод из другого класса, он возвращает -1 вместо этого, даже если выбрана строка?

Например, у меня есть такой метод.

    public int getSelectedRow(){
        int row = drinksTable.getSelectedRow();
        System.out.println(row);
        return row;
    }

У меня есть класс jframe A и класс B , который содержит все функции, такие как покупка, удаление, редактирование и т. Д. c. Мне нужно знать, какая строка выбрана для того, чтобы я мог купить, удалить, отредактировать правильную запись. Код выше относится к классу A . Проблема заключается в том, что если я пытаюсь вызвать вышеуказанный метод в классе B , возвращаемая строка всегда равна -1, что означает, что ни одна строка не выбрана, даже если в таблице ясно показано, что строка выделен и выбран. И если я пытаюсь вызвать метод в том же классе, он возвращает правильное значение. В чем здесь проблема?

Например, класс A здесь называется VendingMachine. У меня есть такой метод в классе B . Часть, где я использовал метод, находится в верхней половине, где происходит объявление. Так как я хотел, чтобы значение изменялось в зависимости от выбранной строки, 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 = VendingMachine

Класс 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 вместо выбранной строки. Чего мне не хватает ??

...