2012-10-01 12 views
5

SwingからJavaFXにジャンプしようとしています。しかし、私はノードの幅と高さを取得する方法を見つけることができません。ノードの寸法を取得する - JavaFX 2

ここには少しのコードがあります。

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

結果は以下のとおりです。

-1.0 
0.0 
-1.0 
-1.0 

スイングで同じものがある:

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

が編集した後


ありがとう:

なぜこれは私のために働いていないのですか?

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

答えて

7

あなたが実際に現場に置かれた容器内のノードを置くまで、彼らは、コンテナの種類に応じて変更することができますので、幅と高さは、初期化されません。

は、次の試してみてください:あなたのコードで

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

次の変更を行います。ノードが使用でき、画面に追加されると

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

私は私の最初の編集しましたそれはまだ私のために働いていないので、投稿してください。私はここに私の最初の投稿であるので、それを編集することなく私の投稿に再び答える方法を知らない。助けてくれてありがとう。同様の理由で –

+0

もあります。 sceneに置かれる前に、 'label.getWidth()'を呼び出しています。修正されたコードサンプルを追加しました。 –

+0

はい、私はこれの背後にある論理を完全に理解していました。 Sergeyありがとうございました。 –

7

を:

thisNode.getBoundsInParent().getHeight(); //Returns height of object in parent container. 
関連する問題