Некорректная работа кнопок приложения

448
01 августа 2017, 16:03

Приложение что-то наподобие словаря. Есть менюшка из 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");
        }
    }
}
Answer 1

В Вашей конструкции 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 данной конструкции.

READ ALSO
Как выйти из приложения?

Как выйти из приложения?

В моем приложении одна главная активность, и я добавляю в стек фрагменты при переходе (в последующих фрагментах схема такая же):

329
Статус sms-сообщения

Статус sms-сообщения

Никак не получается запросить статусы смс-сообщений - приложение вылетает

210
Ошибка Could not find or load main class

Ошибка Could not find or load main class

Вроде все работало, я вышел из IDE, потом опять зашел, и при запуске выходит ошибка

436
Вызов метода по событию , регистрация на событие

Вызов метода по событию , регистрация на событие

Как на java реализовать что бы по определённому событию вызывались определённые методы, которые подписаны на это событиеТо есть если нажали...

206