【发布时间】:2015-11-03 18:35:53
【问题描述】:
我正在尝试实现一个侦听器,以检索 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();
}
}
【问题讨论】:
标签: java javafx tableview listener