Приложение что-то наподобие словаря. Есть менюшка из 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
данной конструкции.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В моем приложении одна главная активность, и я добавляю в стек фрагменты при переходе (в последующих фрагментах схема такая же):
Вроде все работало, я вышел из IDE, потом опять зашел, и при запуске выходит ошибка
Как на java реализовать что бы по определённому событию вызывались определённые методы, которые подписаны на это событиеТо есть если нажали...