慕婉清6462132
2023-06-21 16:05:59
我剛剛制作了一個(gè)簡(jiǎn)單的應(yīng)用程序,其中包括 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); }}這個(gè) Gallery.class 是擴(kuò)展 FlowPane 的主要后臺(tái)類。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>();問(wèn)題是,當(dāng)我在圖庫(kù)中拖動(dòng) PlotterPanel 時(shí),第一次無(wú)法拖動(dòng)它。我在第二次嘗試后工作了。當(dāng)我開始拖動(dòng)時(shí),它顯示拖動(dòng)框,但是當(dāng)我嘗試放在另一個(gè)節(jié)點(diǎn)上時(shí),鼠標(biāo)點(diǎn)顯示 x 符號(hào)。但是當(dāng)目標(biāo)已經(jīng)嘗試節(jié)點(diǎn)被拖動(dòng)時(shí),我可以放在該節(jié)點(diǎn)上。我怎樣才能使拖放在 JavaFX 中正常工作?
1 回答
德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
問(wèn)題在于你接受阻力的條件:
if (dragboard.hasString()
&& TAB_DRAG_KEY.equals(dragboard.getString())
&& draggingTab.get() != null) {
event.acceptTransferModes(TransferMode.MOVE);
event.consume();
}
您正在檢查draggingTab目標(biāo),而不是源。如果目標(biāo)本身沒有被拖動(dòng),它的draggingTab屬性仍然為空。如果您已經(jīng)拖動(dòng)了目標(biāo),那么它不會(huì)為空并且它將接受拖動(dòng)。
你是說(shuō)做draggingTab靜態(tài)的嗎?
添加回答
舉報(bào)
0/150
提交
取消
