举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > javafx拖放事件 JavaFX拖放

javafx拖放事件 JavaFX拖放

2023-03-24 20:18 Java教程

javafx拖放事件 JavaFX拖放

javafx拖放事件

JavaFX拖放事件是JavaFX中一种常见的交互方式,它允许用户将一个对象从一个位置拖动到另一个位置。它可以用来实现各种功能,如文件的拖放,图像的拖放,文本的拖放等。

JavaFX中的拖放事件是通过DragEvent来处理的。DragEvent是JavaFX中用于处理鼠标和触摸屏上的“drag”事件的对象。当用户在界面上开始一个drag行为时,会触发DragEvent,并将该对象传递到相应的处理函数中。

// 创建一个 DragEvent 监听器 
node.setOnDragEntered(new EventHandler<DragEvent>() { 
    @Override 
    public void handle(DragEvent event) { 
        // 处理 DragEvent 事件 
    } 
}); 

在处理DragEvent时,可以使用event.getSource()方法来获取正在处理该事件的Node对象。然后可以使用event.getTarget()方法来获取正在处理该事件的目标Node对象。这样就可以得到正在进行drag行为的Node对象和目标Node对象,并根据需要执行相应的功能。

// 获取正在处理 DragEvent 的 Node 对象  
Node source = (Node) event.getSource();  
// 获取正在处理 DragEvent 的目标 Node 对象  
Node target = (Node) event.getTarget();  

此外,还可以使用event.getTransferMode()方法来判断当前drag行为是copy、move还是link等。依据不同情况执行不同功能即可实现不同效果。

   // 获得当前 drag 行为   TransferMode mode = event.getTransferMode();   if (mode == TransferMode.COPY) {     // 执行 copy 操作     ...   } else if (mode == TransferMode.MOVE) {     // 执行 move 操作     ...   } else if (mode == TransferMode.LINK) {     // 执行 link 操作     ...   } 

总之,JavaFX中的DragEvent是一种常用耐用、易学易用、功能强大、易扩展性强的UI交互方式;它能有效帮助开发者快速实现各种功能;也能有效帮助用户快速实现各种需要。

JavaFX拖放

JavaFX教程 - JavaFX拖放


例子



import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DataFormat;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Main extends Application {
  final Text source = new Text(50, 100, "DRAG ME");
  final Text target = new Text(150, 100, "DROP HERE");
  private static final DataFormat customFormat =
      new DataFormat("helloworld.custom");
  public static void main(String[] args) {
    Application.launch(args);
  }

  @Override
  public void start(Stage primaryStage) {
    Group root = new Group();
    Scene scene = new Scene(root, 300, 250);
    root.getChildren().addAll(source,target);

    source.setOnDragDetected(new EventHandler<MouseEvent>() {
      public void handle(MouseEvent event) {
          
          
          Dragboard db = source.startDragAndDrop(TransferMode.ANY);
          
          
          ClipboardContent content = new ClipboardContent();
          content.putString(source.getText());
          db.setContent(content);
          
          event.consume();
      }
  });
  target.setOnDragOver(new EventHandler<DragEvent>() {
      public void handle(DragEvent event) {
          
          
          if (event.getGestureSource() != target &&
                  event.getDragboard().hasString()) {
              
              event.acceptTransferModes(TransferMode.MOVE);
          }
          
          event.consume();
      }
  });
  target.setOnDragEntered(new EventHandler<DragEvent>() {
      public void handle(DragEvent event) {
      
      
           if (event.getGestureSource() != target &&
                   event.getDragboard().hasString()) {
               target.setFill(Color.GREEN);
           }
                  
           event.consume();
      }
  });
  target.setOnDragExited(new EventHandler<DragEvent>() {
      public void handle(DragEvent event) {
          
          target.setFill(Color.BLACK);

          event.consume();
      }
  });
  target.setOnDragDropped(new EventHandler<DragEvent>() {
      public void handle(DragEvent event) {
          
          
          Dragboard db = event.getDragboard();
          boolean success = false;
          if (db.hasString()) {
             target.setText(db.getString());
             success = true;
          }
          
          event.setDropCompleted(success);
          
          event.consume();
       }
  });
  source.setOnDragDone(new EventHandler<DragEvent>() {
      public void handle(DragEvent event) {
          
          
          if (event.getTransferMode() == TransferMode.MOVE) {
              source.setText("");
          }
          event.consume();
      }
  });

    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

上面的代码生成以下结果。

null


阅读全文
以上是编程学为你收集整理的javafx拖放事件 JavaFX拖放全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部