user-interface - JavaFX:将节点拖入 HBox
问题描述
我有一个矩形,右边的另一种类型的节点是一个 VBox,它的子节点是一个 HBox,其中包含线上方的虚线矩形、分隔符和线下方的虚线矩形。我可以拖放左侧的矩形,但我希望能够将它拖到较小的虚线矩形之一上,并让拖动的矩形取代虚线的位置。我该怎么做呢?到目前为止我所拥有的示例代码:
package sample;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Example extends Application {
@Override
public void start(Stage stage) {
Rectangle r1 = new Rectangle();
r1.setX(50);
r1.setY(50);
r1.setWidth(200);
r1.setHeight(100);
r1.setFill(Color.rgb(30,30,30));
r1.setStroke(Color.WHITE);
Rectangle r2 = new Rectangle();
r2.setX(300);
r2.setY(50);
r2.setWidth(100);
r2.setHeight(50);
r2.setFill(Color.rgb(30,30,30));
r2.setStroke(Color.WHITE);
r2.setStyle("-fx-stroke-dash-array: 2");
makeDraggable(r1);
makeDraggable(r2);
Group root = new Group(r2, r1);
Scene scene = new Scene(root, 800, 400);
scene.setFill(Color.rgb(30, 30, 30));
stage.setTitle("Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
private void makeDraggable(Node n) {
final Delta dragDelta = new Delta();
n.setOnMousePressed(mouseEvent -> {
dragDelta.x = n.getLayoutX() - mouseEvent.getSceneX();
dragDelta.y = n.getLayoutY() - mouseEvent.getSceneY();
});
n.setOnMouseDragged(mouseEvent -> {
n.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
n.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
});
}
}
class Delta { double x, y; }
解决方案
推荐阅读
- python - 通过 pip 安装 PyGObject 时文件 msvc_recommended_pragmas.h 丢失
- gcc - 交叉复制到嵌入式 Linux ARM 设备时,使用最新的 GCC 以较旧版本的 libstdc++ 为目标
- javascript - 我必须在 javascript 中添加什么才能使它成为我的样子
- python - 在 pandas 上合并:在无法匹配时减少合并变量的集合
- azure - 如何使用 jenkins 和 TerraForm 将 React 应用程序(github 上的代码)部署到 Azure WebApp
- python - Matplotlib.pyplot.eventplot:在事件图中使用颜色
- python - TensorFlow Federated Compression:如何实现在 TFF 的 build_federated_averaging_process 中使用的有状态编码器?
- javascript - 脚本标签的动态变化不反映页面的内容
- javascript - 使用范围列表过滤数字列表
- r - 更改串扰的 filter_slider() 函数背后的代码