私はスクロールバーを接続したいので、同時にスクロールすることができる2つのテーブルがあります。私の知る限り、TableViews
独自のスクロールバーのバインドは不可能です(私が間違っていれば私を修正してください)。TableView
をScrollPane
にラップすることにしました。JavaFX TableView:テーブルからscollbarsを削除/無効にします(代わりにScrollPaneを使用)
ただし、テーブルのスクロールはまだTableView
独自のスクロールバーに設定されています。
下は基本的なコード例です。ご覧のように、ScrollPane
スクロールバーの双方向バインディングが機能します。しかし、上記の問題(主なコントロールはTableViews
独自のスクロールバーです)のため、テーブルのデータはこれの影響を受けません。
誰かが私にこれを助けることができますか? TableViews
スクロールバーを使用する代わりにスクロールバーを使用してTableView
に移動したいと思います(バインドできないため)。
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);
}
}
}