【发布时间】:2017-01-31 06:06:20
【问题描述】:
这是一个示例应用程序,它允许您将一些文本拖放到其他区域。
我想加入的一个应用程序允许从 swing 中删除,但不允许从 JavaFX 中删除。
如果 JavaFX 位于 JFXPanel 和 Swing JFrame 中,它会下降。 如果它只是一个 Stage 中的纯 JavaFX,它具有“禁止进入”标志,并且不接受丢弃。
其他应用程序允许或阻止两者。但这一个应用程序接受 JFrame 的 drop 而不是 Stage,实际的 Label 组件等是相同的。
import javafx.application.Application;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.*;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javax.swing.*;
public class DragViewExample extends Application {
@Override
public void start(Stage primaryStage) {
TextField tf = new TextField("Copied Text");
tf.setOnDragDetected(e -> {
Dragboard db = tf.startDragAndDrop(TransferMode.COPY);
db.setDragView(new Text(tf.getText()).snapshot(null, null), e.getX(), e.getY());
ClipboardContent cc = new ClipboardContent();
cc.putString(tf.getText());
db.setContent(cc);
});
tf.setOnDragDropped(event -> {
System.out.println("dropped");
});
tf.setOnDragDone(event -> {
System.out.println("done");
});
//FULL JAVAFX
Scene scene = new Scene(new StackPane(new HBox(10, tf)), 350, 75);
primaryStage.setScene(scene);
primaryStage.show();
//JAVAFX INSIDE SWING
// JFrame frame = new JFrame();
// JFXPanel fxPanel = new JFXPanel();
// Scene swingscene = new Scene(new StackPane(new HBox(10, tf)), 350, 75);
// fxPanel.setScene(swingscene);
// frame.setContentPane(fxPanel);
// frame.pack();
// frame.setVisible(true);
}
public static void main(String[] args) {
launch(args);
}
}
【问题讨论】:
标签: java swing javafx drag-and-drop