public void reScaleX(){
this.Message.setScaleX(( //Message is the Label Variables name.
this.getWidth() - 40 //40 is the 20 + 20 padding given to the control.
) / this.Message.getBoundsInLocal().getWidth()
);
}
public void reScaleY(){
this.Message.setScaleY((
this.getHeight() - 40 //40 is the 20 + 20 padding given to the control.
) / this.Message.getBoundsInLocal().getHeight()
);
}
@Override public void initialize(URL location, ResourceBundle resources){
this.widthProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) -> this.reScaleX());
this.heightProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) -> this.reScaleY());
}
this.PreviewStage.widthProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) ->
this.PreviewPlaque.reScaleX()
); this.PreviewStage.heightProperty().addListener((
ObservableValue<? extends Number> obsV, Number oldV, Number newV
) ->
this.PreviewPlaque.reScaleY()
);
但它的行为仍然不正确。
我觉得我做错了,但我不知道如何做对。在这样的窗体上重新缩放控件的正确方法是什么?有没有更好的方法来达到我所期待的结果?
如果缩放标签,它将对其父标签产生布局影响,再次导致宽度/高度属性更改,从而触发致命的布局递归。
我不是百分之百确定你想要实现什么。
a)以某种方式将文本放在可用空间的中心:
void testLabelPlains1(VBox box) {
box.setFillWidth(true);
Label first = new Label("first");
first.setAlignment(Pos.CENTER);
first.setMaxWidth(Double.MAX_VALUE);
first.setMaxHeight(Double.MAX_VALUE);
VBox.setVgrow(first, Priority.ALWAYS);
box.getChildren().addAll(first);
}
void testLabelPlains2(VBox box) {
box.setFillWidth(true);
Label first = new Label("first");
first.setAlignment(Pos.CENTER);
first.setMaxWidth(Double.MAX_VALUE);
first.setMaxHeight(Double.MAX_VALUE);
VBox.setVgrow(first, Priority.ALWAYS);
first.heightProperty().addListener(p -> {
first.setFont(first.getFont().font(first.getHeight()*0.7));
});
box.getChildren().addAll(first);
}
void testLabelPlains3(VBox box) {
Text first = new Text("first");
box.heightProperty().addListener(p -> {
first.setScaleY(0.8*box.getHeight()/20);
first.setTranslateY(box.getHeight()/2);
});
box.widthProperty().addListener(p -> {
first.setScaleX(0.8*box.getWidth()/30);
first.setTranslateX(box.getWidth()/2);
});
box.getChildren().addAll(first);
}
我一直试图从控制器打开一个新窗口以显示进度条: 请帮忙。没有例外,也没有错误。谢谢 编辑:我已经找到了它不显示的原因,这是因为在后面的代码中我有一个函数:阻止程序刷新我的场景和显示元素。是否有一种方法可以在后台或另一个线程中运行这一行(我以前从未使用过线程)再次感谢你的帮助。
我想写一个包含以下类的游戏: 我希望所有这些课程都能在舞台上使用。首先,我启动startUp类,几秒钟后,我想删除startUp stackpane并更改场景(例如从fxml文件读取),但我是javafx中的noob。有什么想法吗?
如何在场景的控件上循环?我尝试使用getChildrenUnmodifiable(),但它只返回第一级子级。
当我调整窗口大小时,舞台以及包含的场景会正确调整大小,但是当我单击最大化按钮时,只有舞台被最大化,而不是里面的场景。更糟糕的是,没有手动更改场景高度和宽度的方法(这些是只读的)。我还尝试创建新场景并将旧场景的根元素放在里面,但后来我得到了一个例外,即2个场景不能具有相同的根元素。谢谢! 最小可再现示例: 我标记了单击“最大化”的时刻。谢谢
我正在使用Javafx(没有使用FXML),我正在将阶段传递到a控制器中,以便在单击按钮时更改阶段上的场景。场景的变化是正确的,但是舞台和场景的尺寸增加了,它的尺寸增加了大约0.1(宽度),而高度有时也增加了(不是每次都增加)。 下面是正在使用的控制器。
问题内容: 我们正在Windows中构建JavaFX应用程序,我们希望能够做一些事情来操纵我们的应用程序在Windows 7/8任务栏中的显示方式。这需要修改Windows变量,称为“ 应用程序用户模型ID ”。 我们已经通过使用JNA设法完全完成了我们在Swing中想要的工作,并且我们想在JavaFX中重复我们的解决方案。不幸的是,要做到这一点,我们需要能够为应用程序中的每个窗口检索(窗口句柄)