2016-07-26 6 views
0

Ich bin mit dem neuesten JDK: 1.8.0_102 ausgeführt, aber auch auf 1.8.0_45 fehlgeschlagen. Hier ist mein einfaches Programm, um das Problem zu replizieren. Schritte zum Reproduzieren:JavaFX Stage.setMaximized funktioniert nur einmal auf Mac OSX (10.9.5)

  1. Run Programm
  2. Maximize klicken (es wird maximieren richtig)
  3. Klicken Sie auf Restore (es wird "unmaximize" richtig)
  4. Klicken Sie erneut maximieren (es wird nichts tun) .

    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); 
    } 
    } 
    

Antwort

0

Maximize muss auf false gesetzt werden, bevor er wieder arbeiten kann! Versuchen Sie, die Einstellung auf "Falsch" zu setzen, sobald Sie die Bühne iconisiert haben. Wenn maximize bereits auf "true" gesetzt ist, wird nichts passieren. Hoffe das hilft!

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

Ich rufe setMaximized (false) in der restoreButton.setOnAction, die Teil der Schritte zu reproduzieren war. Sollte ich etwas anderes machen? –

+0

@EricS. Ich habe meine Antwort mit einem Beispiel aktualisiert! –