猿问

Javafx拖放第一次不起作用

我刚刚制作了一个简单的应用程序,其中包括 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 中正常工作?


慕婉清6462132
浏览 93回答 1
1回答

德玛西亚99

问题在于你接受阻力的条件:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (dragboard.hasString()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; && TAB_DRAG_KEY.equals(dragboard.getString())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; && draggingTab.get() != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.acceptTransferModes(TransferMode.MOVE);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.consume();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }您正在检查draggingTab目标,而不是源。如果目标本身没有被拖动,它的draggingTab属性仍然为空。如果您已经拖动了目标,那么它不会为空并且它将接受拖动。你是说做draggingTab静态的吗?
随时随地看视频慕课网APP

相关分类

Java
我要回答