获取窗格大小而不将其添加到场景中(在 JavaFX 中)?
Get Pane size without adding it to a scene (in JavaFX)?
如果我创建一个 Pane
(里面有节点),我如何计算 width/height 而不在屏幕上渲染它?
我正在尝试创建文档(在内存中)并将其发送到打印机。问题是我需要计算多少页并这样做我需要获取文档的尺寸。
我正在试验的一个简单示例:
Label testLabel1 = new Label("TEST1");
Label testLabel2 = new Label("TEST no. 2");
GridPane testGl = new GridPane();
testGl.add( testLabel1, 1, 1 );
testGl.add( testLabel2, 2, 2 );
VBox testVBox = new VBox( testGl );
Pane testPane = new Pane( testVBox );
//I read that this might be required
testPane.applyCss();
testPane.layout();
//Also that a delay is needed for the fx tread to update testPane
// (but shouldn't this all be in the same thread since it is in the same function?
// It doesn't seem to help).
Platform.runLater( ()->{
System.out.println( ">>> "+ testPane.getBoundsInLocal().getWidth() );
});
我输出的都是>>> 0.0
。请注意,在我正在开发的程序中,我在 "container" Pane
中有多个 Pane
。因此,变量 testPane
.
谢谢。
您需要将 Pane
添加到 Scene
才能使布局正常工作。然而,没有必要显示 Scene
,也没有必要在这个场景中保留 Pane
:
Label testLabel1 = new Label("TEST1");
Label testLabel2 = new Label("TEST no. 2");
GridPane testGl = new GridPane();
testGl.add(testLabel1, 1, 1);
testGl.add(testLabel2, 2, 2);
VBox testVBox = new VBox(testGl);
Pane testPane = new Pane(testVBox);
// add testPane to some scene before layouting
Scene testScene = new Scene(testPane);
testPane.applyCss();
testPane.layout();
System.out.println(">>> " + testPane.getBoundsInLocal().getWidth());
// Pane could be removed from scene
Group replacement = new Group();
testScene.setRoot(replacement);
请注意,如果要从 Scene
中删除根,则必须将其替换为非空节点。
如果我创建一个 Pane
(里面有节点),我如何计算 width/height 而不在屏幕上渲染它?
我正在尝试创建文档(在内存中)并将其发送到打印机。问题是我需要计算多少页并这样做我需要获取文档的尺寸。
我正在试验的一个简单示例:
Label testLabel1 = new Label("TEST1");
Label testLabel2 = new Label("TEST no. 2");
GridPane testGl = new GridPane();
testGl.add( testLabel1, 1, 1 );
testGl.add( testLabel2, 2, 2 );
VBox testVBox = new VBox( testGl );
Pane testPane = new Pane( testVBox );
//I read that this might be required
testPane.applyCss();
testPane.layout();
//Also that a delay is needed for the fx tread to update testPane
// (but shouldn't this all be in the same thread since it is in the same function?
// It doesn't seem to help).
Platform.runLater( ()->{
System.out.println( ">>> "+ testPane.getBoundsInLocal().getWidth() );
});
我输出的都是>>> 0.0
。请注意,在我正在开发的程序中,我在 "container" Pane
中有多个 Pane
。因此,变量 testPane
.
谢谢。
您需要将 Pane
添加到 Scene
才能使布局正常工作。然而,没有必要显示 Scene
,也没有必要在这个场景中保留 Pane
:
Label testLabel1 = new Label("TEST1");
Label testLabel2 = new Label("TEST no. 2");
GridPane testGl = new GridPane();
testGl.add(testLabel1, 1, 1);
testGl.add(testLabel2, 2, 2);
VBox testVBox = new VBox(testGl);
Pane testPane = new Pane(testVBox);
// add testPane to some scene before layouting
Scene testScene = new Scene(testPane);
testPane.applyCss();
testPane.layout();
System.out.println(">>> " + testPane.getBoundsInLocal().getWidth());
// Pane could be removed from scene
Group replacement = new Group();
testScene.setRoot(replacement);
请注意,如果要从 Scene
中删除根,则必须将其替换为非空节点。