Приложение что-то наподобие словаря. Есть менюшка из 4 кнопок: добавить, загрузить, удалить и выйти. После нажатия на первые три кнопки открывается диалоговое окно и дальше загружается ... словарь. Пока просто вывожу на консоль, какая кнопка была нажата и вот в чем проблема: при нажатии на добавить, выводит что были нажаты все кнопки, при нажатии на загрузить - две и лишь при нажатии на удалить, выводит что была нажата только кнопка удалить. Добавить верхняя кнопка, удалить нижняя. Не могу понять в чем дело. Вот мой обработчик событий.
package controllers;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
import java.io.IOException;
public class menuStageController {
enum MenuItem {
add, download, delete
}
private static MenuItem menuItem;
public void bAddDictionaryPressed(ActionEvent actionEvent) {
menuItem = MenuItem.add;
this.dialogStageShow();
}
public void bDownloadDictionaryPressed(ActionEvent actionEvent) {
menuItem = MenuItem.download;
this.dialogStageShow();
}
public void bDeleteDictionaryPressed(ActionEvent actionEvent) {
menuItem = MenuItem.delete;
this.dialogStageShow();
}
public void exitAction(ActionEvent actionEvent) {
System.exit(0);
}
public void dialogStageShow() {
Stage dialogStage = new Stage();
Parent loadScene = null;
try {
loadScene = FXMLLoader.load(getClass().getResource("../fxml/dialogStage.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
dialogStage.setScene(new Scene(loadScene));
dialogStage.setResizable(false);
dialogStage.show();
}
public void dialogStageAction(ActionEvent actionEvent) {
switch(menuItem) {
case add:
System.out.println("Add pressed");
case download:
System.out.println("Download pressed");
case delete:
System.out.println("Delete pressed");
}
}
}
В Вашей конструкции switch-case:
switch(menuItem) {
case add:
System.out.println("Add pressed");
case download:
System.out.println("Download pressed");
case delete:
System.out.println("Delete pressed");
}
не хватает оператора break. Из-за этого у Вас выполняются все блоки case после подходящего под условие.
Правильная конструкция будет выглядеть так:
switch(menuItem) {
case add:
System.out.println("Add pressed");
break;
case download:
System.out.println("Download pressed");
break;
case delete:
System.out.println("Delete pressed");
break;
}
Здесь, после подходящего под условие блока будет выполнен оператор break, в результате чего выполнение программы будет продолжено сразу после конструкции switch-case, минуя все последующие case данной конструкции.
Продвижение своими сайтами как стратегия роста и независимости