如何创建(即时)动态调整大小的JavaFX应用程序?现在,我已经编写了一个简单的应用程序,它可以动态地调整大小,但是布局的更改直到鼠标按键释放后才会显示出来。我希望在此按钮释放之前立即看到结果/布局更改。
我假设这是通过将正确的值/控件与逆向绑定来完成的。任何帮助都是最好的!
编辑:
以下是我是如何让事情运行起来的(感谢Praeus)。正如他所说的,我必须将我的顶级容器/布局宽度和高度绑定到scene.width和scene.height。--
变量场景:场景;
阶段{
标题:“应用程序标题”
scene: scene = Scene {
content: [
XMigLayout {
宽度:绑定scene.width;
高度:绑定scene.height;
...}]}}
发布于 2010-08-04 04:18:16
实际上,如果您已经将所有内容都组织到布局中,那么您可能只需要将顶级布局容器的宽度和高度绑定到scene.width和scene.height。我不认为顶级布局控件是由任何东西管理的,所以直接设置布局控件的宽度和高度可能是安全的。如果这不起作用,那么您可能成功地绑定了layoutInfo的宽度和高度。
理想情况下,您希望在求助于绑定之前使用布局管理。过多的绑定可能会造成性能问题,并且在调整大小时可能会导致重绘速度变慢。在这种情况下,您可能只需要对顶级容器使用绑定,然后顶级容器的所有子容器都应该相应地调整大小。至少我认为这应该行得通。
发布于 2012-02-28 06:07:42
Bind在JavaFX的2.0版本中有所不同。Angela Caicedo's video演示了如何很好地绑定属性。必须将变量设置为ObservableNumberValue,并使用其get和set方法。设置完成后,您可以将其绑定到组件的属性。
DoubleProperty x = new SimpleDoubleProperty(0);
x.set(1);
x.getValue();
imageView.xProperty().bind(x);
anchorPane.heightProperty().add(x);
Eric Bruno's post是另一种方式。
scene.widthProperty().addListener(
new ChangeListener() {
public void changed(ObservableValue observable,
Object oldValue, Object newValue) {
Double width = (Double)newValue;
tbl.setPrefWidth(width);
}
});
scene.heightProperty().addListener(
new ChangeListener() {
public void changed(ObservableValue observable,
Object oldValue, Object newValue) {
Double height = (Double)newValue;
tbl.setPrefHeight(height);
}
});
编辑:添加了另一个更合适的答案,以及我找到它的地方。
发布于 2010-08-04 02:43:04
是的,我认为你的想法是正确的--绑定是你想要做的事情的明显方式。您还可以查看触发器。
如果您还没有阅读1.3 guide to layouts,请阅读它作为起点
布局容器自动管理其内容节点的动态布局行为。但是,通常也希望使用JavaFX脚本的绑定机制来建立布局的某些动态方面。例如,可以将HBox容器的宽度和高度绑定到场景高度和宽度,以便每当场景调整大小时,HBox容器也会调整大小。
JavaFX布局大师Amy Fowler撰写的文章和博客文章也可能值得一读
https://stackoverflow.com/questions/3391373
复制相似问题