gpt4 book ai didi

HBox 上的 Java 节点动态位置

转载 作者:行者123 更新时间:2023-12-01 09:57:54 25 4
gpt4 key购买 nike

我使用某些事件在 HBox 上放置小矩形。当窗口没有调整大小时,它们的位置是完美的,但是当你从小到全屏时,它们的位置是错误的(当然,因为它们在放置时获得了一定的 X 值 - 这是通过获取HBox 在该特定时刻的宽度)。

问题:

如何使这些位置动态化,以便当我调整窗口大小时,它们保持比例?

图片: Normal view Fullscreen

代码:

@FXML HBox tagLine; // initializes the HBox

...

public void addTag(String sort) {
Rectangle rect = new Rectangle(20, tagLine.getHeight());
double pos = timeSlider.getValue() / 100 * tagLine.getWidth(); // retrieves position at the moment of being called
rect.setTranslateX(pos);
rect.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
showNotification("Gemarkeerde gebeurtenis: " + sort);
}
});
rect.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
notificationHide.play();
}
});

tagLine.getChildren().add(rect);
}

最佳答案

在翻译具有可解释大小的形状时,您需要考虑的一些事情是:

  • 从中心平移形状
  • 如果平移取决于节点的宽度,请监听对该特定节点的 with 所做的更改,并对平移属性进行相应的更改

您的实现中似乎缺少上述两点。您永远不会监听 HBox 的 width 属性。您对 pos 的计算也没有考虑矩形的中心。

这是一个示例,无论 HBox 的大小如何,都尝试将矩形保持在中心。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

private static final int SIDE = 40;
private static final double DEFAULT_WIDTH = 200;
private static final double DEFAULT_POSITION = 100;

@Override
public void start(Stage primaryStage) {

Rectangle rectangle = new Rectangle(SIDE, SIDE);
HBox root = new HBox(rectangle);
root.setPrefWidth(DEFAULT_WIDTH);

rectangle.translateXProperty().bind(root.widthProperty().multiply(DEFAULT_POSITION/DEFAULT_WIDTH).subtract(SIDE/2));

Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}

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

enter image description here

关于HBox 上的 Java 节点动态位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com