2012-10-01 3 views
5

J'essaie de passer à JavaFX de Swing. Mais je ne peux pas trouver comment obtenir la largeur et la hauteur d'un nœud.Obtenir la dimension d'un nœud - JavaFX 2

Donc, voici un peu de code.

Label label = new Label(); 
label.setText("Hello"); 
label.setFont(new Font(32)); 

System.out.println(label.getPrefWidth()); 
System.out.println(label.getWidth()); 
System.out.println(label.getMinWidth()); 
System.out.println(label.getMaxWidth()); 

Les résultats sont les suivants:

-1.0 
0.0 
-1.0 
-1.0 

La même chose Swing est:

JComponent.getPreferredSize().width 
JComponent.getPreferredSize().height 

Merci


Après édition:

Pourquoi cela ne fonctionne pas pour moi?

public class Dimensions extends Application { 

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

    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Hello World!"); 

     primaryStage.setScene(new Scene(new MyPanel(), 500, 500)); 
     primaryStage.centerOnScreen(); 
     primaryStage.setResizable(false); 
     primaryStage.show(); 
    } 
} 
public class MyPanel extends Pane { 

    public MyPanel() { 
     Label label = new Label(); 
     label.setText("Hello"); 
     label.setFont(new Font(32)); 

     getChildren().add(label); 

     label.relocate(150, 150); 

     System.out.println(label.getWidth()); 
    } 
} 

Répondre

7

largeur et la hauteur ne sont pas initialisés jusqu'à ce que vous mettez le noeud dans un conteneur placé réellement sur la scène, car ils peuvent varier en fonction du type de conteneur.

Essayez suivante:

public void start(Stage primaryStage) { 
    Label label = new Label(); 
    label.setText("Hello"); 
    label.setFont(Font.font("Arial", 32)); 

    System.out.println(label.getWidth()); 

    StackPane root = new StackPane(); 
    root.getChildren().add(label); 

    Scene scene = new Scene(root, 300, 250); 

    primaryStage.setTitle("Hello World!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    System.out.println("------"); 
    System.out.println(label.getWidth()); 
} 

Dans votre code font suivant les changements:

public class Dimensions extends Application { 

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

    public void start(Stage primaryStage) { 
     MyPanel myPanel = new MyPanel(); 
     primaryStage.setScene(new Scene(myPanel, 500, 500)); 
     primaryStage.show(); 

     System.out.println(myPanel.label.getWidth()); 
    } 
} 

class MyPanel extends Pane { 
    public Label label; 

    public MyPanel() { 

     label = new Label(); 
     label.setText("Hello"); 
     label.setFont(new Font(32)); 
     getChildren().add(label); 
     label.relocate(150, 150); 
    } 
} 
+0

J'ai effectué mon premier poste parce que ça ne marche toujours pas pour moi. Je ne sais pas comment répondre à mon post sans l'éditer car c'est mon premier post ici. Merci pour ton aide. –

+0

pour la même raison. Vous appelez 'label.getWidth()' avant d'être placé sur scène. J'ai ajouté un exemple de code corrigé. –

+0

Oui, j'ai compris complètement la logique derrière cela. Merci Sergey. –

7

Une fois que le noeud est ajouté à l'écran, vous pouvez utiliser:

thisNode.getBoundsInParent().getHeight(); //Returns height of object in parent container. 
Questions connexes