【发布时间】:2017-07-06 07:11:52
【问题描述】:
我有两个表,我想连接其中的滚动条,以便它们可以同时滚动。据我所知TableViews 自己的滚动条的绑定是不可能的(如果我错了,请纠正我),所以我决定将每个TableView 包装在ScrollPane 中。
但是表格的滚动仍然设置为TableView自己的滚动条。
下面是一个基本的代码示例。如您所见,ScrollPane 滚动条的双向绑定有效。但是由于我上面描述的问题,表中的数据不受此影响(主控件是TableViews自己的滚动条)。
有人可以帮我解决这个问题吗?我想使用ScrollPane 滚动条在TableView 中移动,而不是使用TableViews 滚动条(因为我无法绑定它们)。
public class Main extends Application {
private TableView<Person> table = new TableView<>();
private TableView<Person> table2 = new TableView<>();
private final ObservableList<Person> data =
FXCollections.observableArrayList(
new Person("Jacob", "Smith"),
new Person("Isabella", "Johnson"),
new Person("Ethan", "Williams"),
new Person("Emma", "Jones"),
new Person("Michael", "Brown")
);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(300);
stage.setHeight(1000);
TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
firstNameCol.setPrefWidth(100);
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");
lastNameCol.setPrefWidth(100);
lastNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
table.setItems(data);
table.getColumns().addAll(firstNameCol, lastNameCol);
table2.setItems(data);
table2.getColumns().addAll(firstNameCol, lastNameCol);
ScrollPane sp = new ScrollPane(table);
sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
ScrollPane sp2 = new ScrollPane(table2);
sp2.setHbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
sp2.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
sp.setHmax(3);
sp2.setHmax(3);
sp.hvalueProperty().bindBidirectional(sp2.hvalueProperty());
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(sp, sp2);
((Group) scene.getRoot()).getChildren().addAll(vbox);
stage.setScene(scene);
stage.show();
}
public static class Person {
private final SimpleStringProperty firstName;
private final SimpleStringProperty lastName;
private Person(String fName, String lName) {
this.firstName = new SimpleStringProperty(fName);
this.lastName = new SimpleStringProperty(lName);
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String fName) {
firstName.set(fName);
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String fName) {
lastName.set(fName);
}
}
}
【问题讨论】: