2016-07-26 2 views
0

Я работаю с последним JDK: 1.8.0_102, но также не смог выполнить 1.8.0_45. Вот моя простая программа для репликации проблемы. Шаги для воспроизведения:JavaFX Stage.setMaximized работает только один раз на Mac OSX (10.9.5)

  1. Запуск программы
  2. Нажмите Maximize (это максимально корректно)
  3. Нажмите Восстановить (это будет "unmaximize" правильно)
  4. Нажмите снова Максимизация (он не будет ничего делать) ,

    import javafx.application.Application; 
    import javafx.event.ActionEvent; 
    import javafx.event.EventHandler; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.layout.VBox; 
    import javafx.stage.Stage; 
    
    public class TestApplication extends Application { 
    
    @Override 
    public void start(Stage primaryStage) throws Exception { 
        VBox pane = new VBox(); 
        Button maximizeButton = new Button("Maximize"); 
        pane.getChildren().add(maximizeButton); 
        Button restoreButton = new Button("Restore"); 
        pane.getChildren().add(restoreButton); 
    
        maximizeButton.setOnAction(new EventHandler<ActionEvent>() { 
         @Override 
         public void handle(ActionEvent event) { 
          primaryStage.setMaximized(true); 
         } 
        }); 
    
        restoreButton.setOnAction(new EventHandler<ActionEvent>() { 
         @Override 
         public void handle(ActionEvent event) { 
          primaryStage.setMaximized(false); 
         } 
        }); 
    
        primaryStage.setScene(new Scene(pane)); 
        primaryStage.show(); 
    } 
    
    public static void main(String[] args) { 
        launch(args); 
    } 
    } 
    

ответ

0

Maximize должен быть установлен в ложь, прежде чем он может работать снова! Попробуйте установить максимальное значение в false, как только вы выделите сцену. Если максимизация уже установлена ​​в true, ничего не произойдет. Надеюсь это поможет!

example!! 


public static void maximize() { 
     if (!stage.isMaximized()) { 
      stage.setWidth(Utils.WIDTH); 
      stage.setHeight(Utils.HEIGHT); 
      stage.setX(0); 
      stage.setY(0); 
      stage.setMaximized(true); 
     } 
     else { 
      if (stage.getX() != 0 && stage.getY() != 0) { 
       stage.setWidth(Utils.WIDTH); 
       stage.setHeight(Utils.HEIGHT); 
       stage.setX(0); 
       stage.setY(0); 
      } 
      else if (stage.getX() == 0 && stage.getY() == 0) { 
       stage.setMaximized(false); 
       stage.setWidth(Utils.WIDTH * .8); 
       stage.setHeight(Utils.HEIGHT * .8); 
       stage.setX(200); 
       stage.setY(85); 
      } 
     } 
    } 

    public static void minimize() { 
     stage.setIconified(true); 
    } 
+0

Я вызываю setMaximized (false) в restoreButton.setOnAction, который был частью шагов для воспроизведения. Должен ли я делать что-то другое? –

+0

@EricS. Я обновил свой ответ на примере! –

Смежные вопросы