具有水平滚动功能的 JavaFX 8 Tableview
JavaFX 8 Tableview with horizontal scrolling
如何让水平滚动条出现而不是将所有列压缩到最小尺寸?您还应该仍然能够不受约束地调整列的大小(并调整水平滚动条)。
要使列采用他们喜欢的大小而不是挤压到可用的屏幕大小,您可以将 columnResizePolicy
设置为 UNCONSTRAINED_RESIZE_POLICY
tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
由于这是默认行为,您必须在某处将 columnResizePolicy
设置为 CONSTRAINED_RESIZE_POLICY
。
更新
这是一个 MCVE,展示了如何在 TableView 中获得水平滚动条。你可以看到我没有设置 columnResizePolicy
因为 UNCONSTRAINED_RESIZE_POLICY
是由 default 设置的。
添加 MCVE 更清晰:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.util.stream.IntStream;
public class Test extends Application {
@Override
public void start(Stage stage) throws Exception {
TableView<Person> tableView = new TableView<>();
tableView.setTableMenuButtonVisible(true);
IntStream.range(0, 15).forEach(value -> {
TableColumn<Person, String> tableColumn = new TableColumn<>("TableColumn" + value);
tableColumn.setPrefWidth(100.0);
tableView.getColumns().add(tableColumn);
});
IntStream.range(1, 10).forEach(value -> {
Person person = new Person("Person" + value, value);
tableView.getItems().add(person);
});
Scene scene = new Scene(new StackPane(tableView));
stage.setScene(scene);
stage.setWidth(500);
stage.setHeight(500);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
如何让水平滚动条出现而不是将所有列压缩到最小尺寸?您还应该仍然能够不受约束地调整列的大小(并调整水平滚动条)。
要使列采用他们喜欢的大小而不是挤压到可用的屏幕大小,您可以将 columnResizePolicy
设置为 UNCONSTRAINED_RESIZE_POLICY
tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
由于这是默认行为,您必须在某处将 columnResizePolicy
设置为 CONSTRAINED_RESIZE_POLICY
。
更新
这是一个 MCVE,展示了如何在 TableView 中获得水平滚动条。你可以看到我没有设置 columnResizePolicy
因为 UNCONSTRAINED_RESIZE_POLICY
是由 default 设置的。
添加 MCVE 更清晰:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.util.stream.IntStream;
public class Test extends Application {
@Override
public void start(Stage stage) throws Exception {
TableView<Person> tableView = new TableView<>();
tableView.setTableMenuButtonVisible(true);
IntStream.range(0, 15).forEach(value -> {
TableColumn<Person, String> tableColumn = new TableColumn<>("TableColumn" + value);
tableColumn.setPrefWidth(100.0);
tableView.getColumns().add(tableColumn);
});
IntStream.range(1, 10).forEach(value -> {
Person person = new Person("Person" + value, value);
tableView.getItems().add(person);
});
Scene scene = new Scene(new StackPane(tableView));
stage.setScene(scene);
stage.setWidth(500);
stage.setHeight(500);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}