为了账号安全,请及时绑定邮箱和手机立即绑定

Javafx拖放第一次不起作用

Javafx拖放第一次不起作用

慕婉清6462132 2023-06-21 16:05:59
我刚刚制作了一个简单的应用程序,其中包括 FlowPane 和一些带有按钮的 VBox。Main类是这样的。public class Main extends Application {    @Override    public void start(Stage stage) {        Gallery a = new Gallery();        a.setMaxWidth(200);        a.setPrefWidth(200);        Scene scene = new Scene(a);         stage.setTitle("Welcome to JavaFX!");         stage.setScene(scene);         stage.sizeToScene();         stage.show();     }    public static void main(String[] args) {        launch(args);    }}这个 Gallery.class 是扩展 FlowPane 的主要后台类。public class Gallery extends FlowPane{    public Gallery() {        super();        PlotterPanel p1 = new PlotterPanel(this, "B1" );        getChildren().add(p1);        PlotterPanel p2 = new PlotterPanel(this, "B2");        getChildren().add(p2);        PlotterPanel p3 = new PlotterPanel(this, "B3" );        getChildren().add(p3);        PlotterPanel p4 = new PlotterPanel(this, "B4" );        getChildren().add(p4);        PlotterPanel p5 = new PlotterPanel(this, "B5" );        getChildren().add(p5);        PlotterPanel p6 = new PlotterPanel(this, "B6" );        getChildren().add(p6);    }}PlotterPanel是VBox,有Button并且可以在Gallery中拖放。public class PlotterPanel extends VBox{    private static final String TAB_DRAG_KEY = "titledpane";    private ObjectProperty<VBox> draggingTab;    private Gallery mgallery;    private PlotterPanel self;    public PlotterPanel(Gallery gallery, String name) {        super();        mgallery = gallery;        setPrefWidth(100);        setPrefHeight(100);        self = this;        Button btn = new Button(name);        btn.setEffect(new DropShadow());        getChildren().add(btn);        draggingTab = new SimpleObjectProperty<VBox>();问题是,当我在图库中拖动 PlotterPanel 时,第一次无法拖动它。我在第二次尝试后工作了。当我开始拖动时,它显示拖动框,但是当我尝试放在另一个节点上时,鼠标点显示 x 符号。但是当目标已经尝试节点被拖动时,我可以放在该节点上。我怎样才能使拖放在 JavaFX 中正常工作?
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

问题在于你接受阻力的条件:


            if (dragboard.hasString()

                    && TAB_DRAG_KEY.equals(dragboard.getString())

                    && draggingTab.get() != null) {

                event.acceptTransferModes(TransferMode.MOVE);

                event.consume();

            }

您正在检查draggingTab目标,而不是源。如果目标本身没有被拖动,它的draggingTab属性仍然为空。如果您已经拖动了目标,那么它不会为空并且它将接受拖动。


你是说做draggingTab静态的吗?


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信