当前位置: 首页 > 知识库问答 >
问题:

JavaFX自定义节点布局[重复]

曾飞沉
2023-03-14

我正在开发一个应用程序,有必要将节点布置在彼此之外(或彼此顶部等)。但是,此布局只是初始布局,用户可以任意移动这些节点。在JavaFX中,如何以正确的方式实现这一点?我将用一个简单的例子来解释我的问题:

假设我有两个矩形,想把矩形2放在矩形1的右边。

// create first rectangle at position x= 5, y=5
rect1 = rectangle(5,5);
// create second rectangle to the right of rect1
rect2 = rectangle(5+rect1.width(), 5); 

在这种情况下,JavaFX还没有确定rect1的宽度,它将为零。直观地说,我会执行一个调用,让JavaFX绘制rect1,从而确定其宽度,然后添加rect2。请参阅以下示例

// create first rectangle at position x= 5, y=5
rect1 = rectangle(5,5);
// let JavaFX draw rect1 (width will be calculated and set)
draw();
// create second rectangle to the right of rect1
rect2 = rectangle(5+rect1.width(), 5);

不幸的是,我还没有找到一个能满足我需求的方法。我当前的解决方法使用了Platform.runLater(),但这并不是一直都能正常工作。如果我对绑定的理解是正确的,那么绑定也不适合这个问题。我只想对节点进行初始布局,因此我必须在初始布局之后删除绑定(否则,如果移动了rect1,rect2将移动)。

提前感谢您的帮助。

编辑:下面是一个简单的工作示例。按钮的宽度为0。我尝试调用root.layout()来强制进行布局传递等操作,但似乎不起作用。

public class Test extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    StackPane root = new StackPane();
    Scene scene = new Scene(root, 300, 250);
    primaryStage.setScene(scene);
    primaryStage.show();
    btn.setText("Say 'Hello World'");
    root.getChildren().add(btn);

    // prints out 0
    System.out.println(btn.getWidth());
}

}

共有1个答案

翁昊乾
2023-03-14

给定上面的例子,如果我将舞台的场景设置为空,然后重置它,调用System.out.println()时按钮宽度将被正确设置。看来这逼的是整个舞台的布局通行证?然而,这似乎是另一种解决方案,特别是我有性能问题。

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    StackPane root = new StackPane();
    Scene scene = new Scene(root, 300, 250);
    primaryStage.setScene(scene);
    primaryStage.show();
    btn.setText("Say 'Hello World'");
    root.getChildren().add(btn);

    // reset scene
    primaryStage.setScene(null);
    primaryStage.setScene(scene);

    // prints out 107.0
    System.out.println(btn.getWidth());
}
 类似资料:
  • 第一次使用JavaFX,所以我对/方法有一个问题。我在做一个弹跳球项目。首先,我使用对象创建球,但由于需要传递更多参数,我决定构建自己的球类()。这是我以前使用时使用的代码: 当将和和放入中时,就会使“球”弹出墙壁。现在,我正试图弄清楚如何使用ball来实现这一点,因为在使用我自己的对象时,无法解析、和方法。如何处理这个/构建自己的等?

  • 但是,在Log4JV2中,PatternLayout类被设置为“final”,整个体系结构也被更改。似乎不再有一种简单的方法来拦截/覆盖对PatternLayout对象的调用。我查看了Apache文档,但没有太多信息。 我检查了这个问题和这个问题,但都没有太多的帮助。 我意识到这是一个非常“一般”的问题,但是有没有人知道在Log4j V2中实现这一点的简单方法,或者对此有什么建议?

  • 有没有办法为不同的日志级别打印不同的布局?例如: 记录器。警告(“消息”);打印如下内容:2016-06-20 13:34:41245 INFO(main:)Message and for logger。信息(“消息2”);仅打印:消息2 有可能做到吗?定义一个布局以警告其他布局以获取信息 log4j.properties

  • 我正在使用PreferenceActivity设置我的应用程序。我想添加一个新的首选项,允许用户选择一个图标。对于这个任务,我想使用ListPreference,但我也想在列表中显示图标。 我尝试自定义List首选项以使用自定义布局,但问题是一旦我这样做了,列表项就不可单击(它确实显示了我的自定义布局并使用当前选择的默认值)。 我在不同的模拟器版本和银河S2上测试了它。当按下项目时,我可以看到一些

  • 本文向大家介绍IOS实现自定义布局瀑布流,包括了IOS实现自定义布局瀑布流的使用技巧和注意事项,需要的朋友参考一下 瀑布流是电商应用展示商品通常采用的一种方式,如图示例 瀑布流的实现方式,通常有以下几种 通过UITableView实现(不常用) 通过UIScrollView实现(工作量较大) 通过UICollectionView实现(通常采用的方式) 一、UICollectionView基础 1、