8

SwingからJavaFXにジャンプしようとしています。しかし、ノードの幅と高さを取得する方法がわかりません。

それで、ここに少しのコードがあります。

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

Swingの同じことは次のとおりです。

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

2 に答える 2

19

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

thisNode.getBoundsInParent().getHeight(); //Returns height of object in parent container.
于 2015-05-02T01:04:26.810 に答える
10

幅と高さは、コンテナのタイプによって変わる可能性があるため、実際にシーンに配置されたコンテナにノードを配置するまで初期化されません。

次に試してください:

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);
    }
}
于 2012-10-01T09:42:05.143 に答える