我想實現一個偵聽器以便檢索tableview中拖動列的舊索引和新索引。對於這篇文章,我試圖儘可能簡化問題,並且仍然有一個運行的例子。JavaFX在tableView中檢索拖動列的索引
我試着用變化和拖拽偵聽器的兩種方法。 對於更改偵聽器,我無法檢索拖動列的舊索引和新索引。我發現change.getFrom和change.getTo值獨立於移動的列。 在setOnDragDropped函數中,DragEvent永遠不會被觸發。
package TableViewColExample;
import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.input.DragEvent;
import javafx.stage.Stage;
public class TableViewExample extends Application {
public static void main(String[] args) {
launch(args);
}
final TableView<String[]> tableView = new TableView<String[]>();
@Override
public void start(Stage stage) {
TableColumn[] columns = {new TableColumn("c1"), new TableColumn("c2"), new TableColumn("c3"), new TableColumn("c4")};
tableView.getColumns().setAll(columns);
tableView.getColumns().addListener(new ListChangeListener() {
@Override
public void onChanged(Change change) {
change.next();
System.out.println("change.getFrom()"+change.getFrom()); //0 independent of moved column
System.out.println("change.getTo()"+change.getTo()); //4 independent of moved column
System.out.println("change.wasAdded()"+change.wasAdded()); //true
System.out.println("change.wasRemoved()"+change.wasRemoved()); //true
System.out.println("change.wasReplaced()"+change.wasReplaced()); //true
}
});
tableView.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
System.out.println("OnDragDropped") ;
}
});
stage.setScene(new Scene(tableView));
stage.show();
}
}