广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州如何在两个JavaFX列表视图之间拖放?_北大青鸟IT学校

作者:邓华发布时间:2021-05-20分类:Java技术浏览:746


导读:如何在两个JavaFX列表视图之间拖放?这是大家在学习Java的过程都会遇到的问题,那么下面我们一起来看看惠州北大青鸟学术部老师是怎么解答的。

如何在两个JavaFX列表视图之间拖放?这是大家在学习Java的过程都会遇到的问题,那么下面我们一起来看看惠州北大青鸟学术部老师是怎么解答的。

以下代码显示如何在自定义对象的两个列表视图之间拖放。

import javafx.application.Application;import javafx.collections.FXCollections;import javafx.collections.ObservableList;import javafx.event.EventHandler;import javafx.geometry.Insets;import javafx.scene.Scene;import javafx.scene.control.Label;import javafx.scene.control.ListCell;import javafx.scene.control.ListView;import javafx.scene.control.SelectionMode;import javafx.scene.input.ClipboardContent;import javafx.scene.input.DragEvent;import javafx.scene.input.Dragboard;import javafx.scene.input.MouseEvent;import javafx.scene.input.TransferMode;import javafx.scene.layout.GridPane;import javafx.stage.Stage;import javafx.util.Callback;public class Main extends Application {  private static final ListView<Student> leftListView = new ListView<Student>();  private static final ObservableList<Student> leftList = FXCollections
     .observableArrayList();  private static final ObservableList<Student> rightList = FXCollections
     .observableArrayList();  private static final ListView<Student> rightListView = new ListView<Student>();  private static final GridPane rootPane = new GridPane();  public static void main(String[] args) {
   launch(args);
 }

 @Override  public void start(Stage primaryStage) {
   initializeComponents();
   initializeListeners();

   buildGUI();

   populateData();

   primaryStage.setScene(new Scene(rootPane, 400, 325));
   primaryStage.show();
 }  private void initializeListeners() {    // drag from left to right    leftListView.setOnDragDetected(new EventHandler<MouseEvent>() {
     @Override      public void handle(MouseEvent event) {        if (leftListView.getSelectionModel().getSelectedItem() == null) {          return;
       }

       Dragboard dragBoard = leftListView.startDragAndDrop(TransferMode.MOVE);
       ClipboardContent content = new ClipboardContent();
       content.putString(leftListView.getSelectionModel().getSelectedItem()
           .getName());
       dragBoard.setContent(content);
     }
   });

   rightListView.setOnDragOver(new EventHandler<DragEvent>() {
     @Override      public void handle(DragEvent dragEvent) {
       dragEvent.acceptTransferModes(TransferMode.MOVE);
     }
   });

   rightListView.setOnDragDropped(new EventHandler<DragEvent>() {
     @Override      public void handle(DragEvent dragEvent) {
       String player = dragEvent.getDragboard().getString();
       rightListView.getItems().addAll(new Student(player));
       leftList.remove(new Student(player));
       leftListView.setItems(leftList);
       dragEvent.setDropCompleted(true);
     }
   });    // drag from right to left    rightListView.setOnDragDetected(new EventHandler<MouseEvent>() {
     @Override      public void handle(MouseEvent event) {
       Dragboard dragBoard = rightListView.startDragAndDrop(TransferMode.MOVE);
       ClipboardContent content = new ClipboardContent();
       content.putString(rightListView.getSelectionModel().getSelectedItem()
           .getName());
       dragBoard.setContent(content);
     }
   });

   leftListView.setOnDragOver(new EventHandler<DragEvent>() {
     @Override      public void handle(DragEvent dragEvent) {
       dragEvent.acceptTransferModes(TransferMode.MOVE);
     }
   });

   leftListView.setOnDragDropped(new EventHandler<DragEvent>() {
     @Override      public void handle(DragEvent dragEvent) {
       String player = dragEvent.getDragboard().getString();
       leftListView.getItems().remove(new Student(player));

       rightList.remove(new Student(player));
       dragEvent.setDropCompleted(true);
     }
   });
 }  private void buildGUI() {
   rootPane.setPadding(new Insets(10));
   rootPane.setPrefHeight(30);
   rootPane.setPrefWidth(100);
   rootPane.setVgap(10);
   rootPane.setHgap(20);

   Label playersLabel = new Label("Players");
   Label teamLabel = new Label("Team");

   rootPane.add(playersLabel, 0, 0);
   rootPane.add(leftListView, 0, 1);
   rootPane.add(teamLabel, 1, 0);
   rootPane.add(rightListView, 1, 1);
 }  private void populateData() {
   leftList.addAll(new Student("Adam"), new Student("Alex"), new Student(        "Alfred"));

   leftListView.setItems(leftList);
   rightListView.setItems(rightList);
 }  private void initializeComponents() {
   initializeListView(leftListView);

   initializeListView(rightListView);
 }  private void initializeListView(ListView<Student> listView) {
   listView.setPrefSize(250, 290);
   listView.setEditable(false);
   listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
   listView.setCellFactory(new StringListCellFactory());
 }  class StringListCellFactory implements
     Callback<ListView<Student>, ListCell<Student>> {
   @Override    public ListCell<Student> call(ListView<Student> playerListView) {      return new StringListCell();
   }    class StringListCell extends ListCell<Student> {
     @Override      protected void updateItem(Student player, boolean b) {
       super.updateItem(player, b);        if (player != null) {
         setText(player.getName());
       }
     }
   }
 }
}class Student {  private String name;  public Student(String name) {
   this.name = name;
 }  public String getName() {    return name;
 }  public void setName(String name) {
   this.name = name;
 }

 @Override  public boolean equals(Object o) {    if (this == o)      return true;    if (o == null || getClass() != o.getClass())      return false;

   Student player = (Student) o;    if (name != null ? !name.equals(player.name) : player.name != null)      return false;    return true;
 }

 @Override  public int hashCode() {    return name != null ? name.hashCode() : 0;
 }
}

想了解更多关于Java的资讯吗?可以来惠州北大青鸟新方舟校区了解一下。

java3.png

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表