javafx вновь открывает свернутое окно с помощью метода stage (?) - PullRequest
0 голосов
/ 01 февраля 2020

Итак, у меня есть приложение JavaFX с уже внедренным лотком, которому требуется 1 параметр, чтобы повторно открыть окно / этап, свернутый этой функцией GuiController, которая вызывается функцией f xml:

`public void minimizeImageViewClick(MouseEvent mouseEvent) {
        if (mouseEvent.getSource() == minimizeImageView) {
            stage = (Stage) ((ImageView) mouseEvent.getSource()).getScene().getWindow();
            stage.setIconified(true);
        }
        if(mouseEvent.getSource() == minimizePane){
            stage = (Stage) ((Pane) mouseEvent.getSource()).getScene().getWindow();
            stage.setIconified(true);
        }
    }`

Существует также один максимизировать, реализованный с помощью тех же средств:

public void maximizeImageViewClick(MouseEvent mouseEvent) {
        if (mouseEvent.getSource() == maximizeImageView) {
            if (ExamAlertStateController.getInstance().getWindowSizeState() == WindowSizeState.INIT) {
                stage = (Stage) ((ImageView) mouseEvent.getSource()).getScene().getWindow();
                stage.setMaximized(true);
                update();
                ExamAlertStateController.getInstance().setWindowSizeState(WindowSizeState.MAXIMIZED);
            } else {
                stage = (Stage) ((ImageView) mouseEvent.getSource()).getScene().getWindow();
                stage.setMaximized(false);
                update();
                ExamAlertStateController.getInstance().setWindowSizeState(WindowSizeState.INIT);
            }
        }
    }`

Кусок лотка с опцией Open (Abrir), которую мне нужно реализовать, и другой, который только меняет экран и состояние, как и все остальные после этого:

@ SpringBootApplication 
public class Application {
    //private final MenuItem menuItemSelectedFile;
    //Stage stage;
    private SystemTray systemTray;
    public static final URL MULTI_LOGO = Application.class.getResource("source.png");
    private Timer evaluatorTimer;

    public static void main(String[] args) {
        * code *
    }

    public Application() {
        Log.i(this.getClass().getName(),"Text");
        SystemTray.FORCE_GTK2=true;
        SystemTray.DEBUG = true;
        CacheUtil.clear();
        this.systemTray = SystemTray.get();
        if (systemTray == null) {
            throw new RuntimeException("text!");
        }

        systemTray.setTooltip("text");
        systemTray.setImage(MULTI_LOGO);
        systemTray.setStatus("TEXT");

        Menu mainMenu = systemTray.getMenu();

        MenuItem openMenuItem = new MenuItem("Abrir", new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {

            }
        });
        openMenuItem.setTooltip("Abrir programa");
        mainMenu.add(openMenuItem);
        mainMenu.add(new Separator());

        MenuItem loginMenuItem = new MenuItem("Login", new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                ExamAlertStateController.getInstance().setWindowState(WindowState.LOGIN);
            }
        });
        loginMenuItem.setTooltip("Login Text");
        mainMenu.add(loginMenuItem);
        mainMenu.add(new Separator());

Создание stage в файле View:

public class eaView extends Application {
    private static final long ONE_SECOND = 1000;
    private static double xOffset = 0;
    private static double yOffset = 0;
    private boolean ignore;
    private Timer updaterTimer;


    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader();
        URL urlLoadingScreen = getClass().getResource("/fxml/source.fxml");
        loader.setLocation(urlLoadingScreen);
        GridPane gridLoadingScreen = loader.load();

        Scene scene = new Scene(gridLoadingScreen);

        stage.initStyle(StageStyle.UTILITY);
        stage.setOpacity(0);
        stage.setHeight(0);
        stage.setWidth(0);
        stage.show();
        Stage mainStage = new Stage();
        //stage.setResizable(false);
        //mainStage.setResizable(false);
        mainStage.initOwner(stage);
        mainStage.initStyle(StageStyle.UNDECORATED);
        mainStage.setScene(scene);
        mainStage.show();

Итак, я не смог вызвать к нему функцию maximizeImageViewClick - я могу сделать это static, но он вызывает метод update(), который содержит множество объектов F XML, которые нельзя изменить, не удалось найти правильные stage способ сделать это (попытки:

stage.setScene(scene);
                stage.setMaxHeight(0);
                stage.setMaxWidth(0);
                stage.setOpacity(0);
                stage.setIconified(true);
                //ExamAlertView.
                System.out.println("foi");
                //ExamAlertView.
                //System.out.println(stage.getProperties());
                stage.show();
                //if (ExamAlertStateController.getInstance().getWindowSizeState() == WindowSizeState.INIT) {
                    //stage = (Stage) ((ImageView) e.getSource()).getScene().getWindow();
                //stage.setIconified(false);
                    //stage.setMaximized(true);
                    //stage.show();
                    //ImageView
                //ExamAlertGuiController.setMinimizeImageView(ExamAlertGuiController.maximizeImageView);
                System.out.println("foi2");

                    //ExamAlertGuiController.update();
                    ExamAlertStateController.getInstance().setWindowSizeState(WindowSizeState.MAXIMIZED);
               /* } else {
                    stage = (Stage) ((ImageView) e.getSource()).getScene().getWindow();
                    stage.setMaximized(false);
                    stage.setIconified(false);
                    //ExamAlertGuiController.update();
                    ExamAlertStateController.getInstance().setWindowSizeState(WindowSizeState.INIT);
                }*/
                //System.out.println(stage.isIconified());

), который был возможен только путем создания

public static Stage stage;
public static Scene scene;

в файле GuiController.

Действительно из идей Вот. Уже прочитал класс javafx.stage, как мог. Может быть, я пытаюсь получить доступ к неправильному этапу - этап UTILITY для удаления кнопки панели задач, mainStage UNDECORATED - реальная сделка, но не могу ее достичь - но я не знаю ....

Как мне это сделать? Заранее спасибо.

...