久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從 ListView 拖放到 TreeView

Drag and Drop from ListView to TreeView(從 ListView 拖放到 TreeView)
本文介紹了從 ListView 拖放到 TreeView的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我只想將一個項目從我的 ListView 拖放到我的 TreeView 中的特定位置.我知道如何處理 DragEvents.但是我怎樣才能得到我的 treeView 的放置位置呢?位置"是指在哪個樹視圖項目上下降(從該樹視圖項目獲取參考)".

I just want to drag and drop an item from my ListView to a specific position in my TreeView. I know how to handle DragEvents. But how can I get the dropped position of my treeView? With "position" I mean "on which treeview-item dropped (get reference from this treeview-item)".

package main;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.DragEvent;
import javafx.scene.input.MouseDragEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;



public class Program extends Application {
    String buffer = "";

    public static void main(String args[]) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Tree View Sample");
        HBox box = new HBox();

        //ListView
        ListView<String> list = new ListView<String>();
        ObservableList<String> items = FXCollections.observableArrayList(
                "Single", "Double", "Suite", "Family App");
        list.setItems(items);
        list.setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                System.out.println("Drag something from ListView");
            }
        });
        //TreeView
        TreeItem<String> rootItem = new TreeItem<String>("Inbox");
        rootItem.setExpanded(true);
        for (int i = 1; i < 6; i++) {
            TreeItem<String> item = new TreeItem<String>("Message" + i);
            rootItem.getChildren().add(item);
        }
        TreeView<String> treeView = new TreeView<String>(rootItem);
        treeView.setEditable(true);
        treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
            @Override
            public TreeCell<String> call(TreeView<String> stringTreeView) {
                TreeCell<String> treeCell = new TreeCell<String>() {
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if (item != null) {
                            setText(item);
                        }
                    }
                };

                treeCell.setOnDragDetected(new EventHandler<MouseEvent>() {
                    @Override
                    public void handle(MouseEvent mouseEvent) {
                        System.out.println("Drag: " + treeCell.getItem());
                    }
                });

                treeCell.setOnDragDropped(new EventHandler<DragEvent>() {
                    public void handle(DragEvent event) {
                        //THIS METHOD DOESN'T WORK (It doesn't called, when i drag something from listview to treeview)
                        System.out.println("Dropped something");
                        event.setDropCompleted(true);
                        event.consume();
                    }
                });

                return treeCell;
            }
        });

        box.getChildren().addAll(list,treeView);
        //Create Scene
        Scene scene = new Scene(box);

        //Add Scene to Stage..
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

除了 setOnDragDetected 處理程序外,沒有任何工作.為什么?
示例我正在嘗試:
想要通過拖放消息 2 與雙"進行更改.
或者我想用Single"更改消息 1.
上面的代碼只是一個更大的項目的測試.

Nothing is working except the setOnDragDetected handler. Why?
Example what I'm trying:
Want to change via drag and drop Message 2 with "Double".
Or I want to change Message 1 with "Single".
The code above is just a test for a larger project.

推薦答案

你需要

  • startDragAndDrop() on DRAG_DETECTED 源事件
  • acceptTransferModes()DRAG_OVER 目標事件
  • event.getDragboard().getString()DRAG_DROPPED 目標事件
  • startDragAndDrop() on DRAG_DETECTED source event
  • acceptTransferModes() on DRAG_OVER target event
  • and event.getDragboard().getString() on DRAG_DROPPED target event

查看完整示例:

@Override
public void start( Stage primaryStage ) throws Exception
{
    HBox box = new HBox();

    // ListView
    ListView<String> list = new ListView<String>( FXCollections.observableArrayList( "Single", "Double", "Suite", "Family App" ) );

    list.setCellFactory( new Callback<ListView<String>, ListCell<String>>()
    {
        @Override
        public ListCell<String> call( ListView<String> param )
        {
            ListCell<String> listCell = new ListCell<String>()
            {
                @Override
                protected void updateItem( String item, boolean empty )
                {
                    super.updateItem( item, empty );
                    setText( item );
                }
            };

            listCell.setOnDragDetected( ( MouseEvent event ) ->
            {
                System.out.println( "listcell setOnDragDetected" );
                Dragboard db = listCell.startDragAndDrop( TransferMode.COPY );
                ClipboardContent content = new ClipboardContent();
                content.putString( listCell.getItem() );
                db.setContent( content );
                event.consume();
            } );

            return listCell;
        }
    } );

    //TreeView
    TreeItem<String> rootItem = new TreeItem<>( "Inbox" );
    rootItem.setExpanded( true );
    for ( int i = 1; i < 6; i++ )
    {
        TreeItem<String> item = new TreeItem<>( "Message " + i );
        rootItem.getChildren().add( item );
    }
    TreeView<String> treeView = new TreeView<>( rootItem );
    treeView.setEditable( true );

    treeView.setCellFactory( new Callback<TreeView<String>, TreeCell<String>>()
    {
        @Override
        public TreeCell<String> call( TreeView<String> stringTreeView )
        {
            TreeCell<String> treeCell = new TreeCell<String>()
            {
                @Override
                protected void updateItem( String item, boolean empty )
                {
                    super.updateItem( item, empty );
                    if ( item != null )
                    {
                        setText( item );
                    }
                }
            };

            treeCell.setOnDragEntered( ( DragEvent event ) ->
            {
                treeCell.setStyle( "-fx-background-color: aqua;" );
            } );

            treeCell.setOnDragExited( ( DragEvent event ) ->
            {
                treeCell.setStyle( "" );
            } );

            treeCell.setOnDragOver( ( DragEvent event ) ->
            {
                Dragboard db = event.getDragboard();
                if ( db.hasString() )
                {
                    event.acceptTransferModes( TransferMode.COPY_OR_MOVE );
                }
                event.consume();
            } );

            treeCell.setOnDragDropped( ( DragEvent event ) ->
            {
                System.out.println( "treeCell.setOnDragDropped" );
                Dragboard db = event.getDragboard();
                boolean success = false;
                if ( db.hasString() )
                {
                    System.out.println( "Dropped: " + db.getString() );
                    treeCell.getTreeItem().getChildren().add( new TreeItem<>( db.getString() ) );
                    treeCell.getTreeItem().setExpanded( true );
                    success = true;
                }
                event.setDropCompleted( success );
                event.consume();
            } );

            return treeCell;
        }
    } );

    box.getChildren().addAll( list, treeView );
    primaryStage.setScene( new Scene( box ) );
    primaryStage.show();
}

這篇關于從 ListView 拖放到 TreeView的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Parsing an ISO 8601 string local date-time as if in UTC(解析 ISO 8601 字符串本地日期時間,就像在 UTC 中一樣)
How to convert Gregorian string to Gregorian Calendar?(如何將公歷字符串轉換為公歷?)
Java: What/where are the maximum and minimum values of a GregorianCalendar?(Java:GregorianCalendar 的最大值和最小值是什么/在哪里?)
Calendar to Date conversion for dates before 15 Oct 1582. Gregorian to Julian calendar switch(1582 年 10 月 15 日之前日期的日歷到日期轉換.公歷到儒略歷切換)
java Calendar setFirstDayOfWeek not working(java日歷setFirstDayOfWeek不起作用)
Java: getting current Day of the Week value(Java:獲取當前星期幾的值)
主站蜘蛛池模板: 91精品国产91久久综合桃花 | 日本欧美在线视频 | 欧美中文一区 | 91久久久精品国产一区二区蜜臀 | 伊人伊人网| 欧美全黄 | 成人黄视频在线观看 | 色综合av | 亚洲视频欧美视频 | 欧美精品综合 | 亚洲国产精品精华素 | 国产成人a亚洲精品 | 国产一区二区三区在线 | 日日夜夜91 | 久久久久久久亚洲精品 | 四虎午夜剧场 | 亚洲午夜网 | 国产激情小视频 | 婷婷毛片| 看一级毛片| 亚洲欧美日韩一区 | 91av在线电影 | 97国产在线视频 | 国产特级毛片 | 欧美一区二区三区在线看 | 中文字幕成人在线 | av一区二区在线观看 | 综合网在线 | 四季久久免费一区二区三区四区 | 亚洲欧美中文日韩在线v日本 | 成人精品鲁一区一区二区 | 四虎成人在线播放 | 久久亚洲视频 | 欧美日韩国产一区二区三区 | 亚洲综合二区 | 国产三级在线观看播放 | 亚洲综合视频 | 亚洲免费在线 | 久久国产一区二区 | 久久天天躁狠狠躁夜夜躁2014 | 日韩国产三区 |