Почему, когда я вызываю 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 вместо выбранной строки. Чего мне не хватает ??