2015-04-10 23 views
7

Voglio centrare un palco sullo schermo.
Questo è quello che ho provato:Fase centrale JavaFX sullo schermo

public class Test extends Application 
{ 
    @Override 
    public void start(final Stage primaryStage) 
    { 
     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent event) 
      { 
      System.out.println("Hello World!"); 
      } 
     }); 
     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 
     Scene scene = new Scene(root, 300, 250); 
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.centerOnScreen(); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) 
    { 
     launch(args); 
    } 
} 

Dopo aver chiamato centerOnScreen() lo stadio è troppo alto. Non sembra funzionare correttamente. Devo calulare personalmente la posizione xey? O come utilizzo questa funzione correttamente?

risposta

13

L'implementazione predefinita di centerOnScreen() è la seguente:

Rectangle2D bounds = getWindowScreen().getVisualBounds(); 
double centerX = bounds.getMinX() + (bounds.getWidth() - getWidth()) 
              * CENTER_ON_SCREEN_X_FRACTION; 
double centerY = bounds.getMinY() + (bounds.getHeight() - getHeight()) 
              * CENTER_ON_SCREEN_Y_FRACTION; 
x.set(centerX); 
y.set(centerY); 

dove

CENTER_ON_SCREEN_X_FRACTION = 1.0f/2; 
CENTER_ON_SCREEN_Y_FRACTION = 1.0f/3; 

centerY sarà sempre impostare la fase di poco superiore al centro.

Per posizionare il tavolino al centro esatto, è possibile utilizzare il proprio valore X e Y personalizzato X e Y. .

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction((ActionEvent event) -> { 
       System.out.println("Hello World!"); 
     }); 
     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 
     Scene scene = new Scene(root, 300, 250); 
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds(); 
     primaryStage.setX((primScreenBounds.getWidth() - primaryStage.getWidth())/2); 
     primaryStage.setY((primScreenBounds.getHeight() - primaryStage.getHeight())/2); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+3

così, mi chiedo perché (l'inferno) questo metodo viene chiamato ** ** centerOnScreen. Sembra che tipo di insetto. – Ben

+1

No, non è un bug ma il comportamento desiderato. Puoi leggere i commenti su [questo thread] (https://javafx-jira.kenai.com/browse/RT-40368) – ItachiUchiha

+3

Sì, l'ho letto e ho creato un commento lì. Ai miei occhi, questo nome di metodi è chiaramente fuorviante/sbagliato. – Ben

Problemi correlati