我的tableView有问题。我的tableview有两列,第二列是文件路径。所以我想通过滚动来实现滚动条来查看整个路径,因为tableView大小是固定的。
我添加了 setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY); 它显示滚动条,但我无法移动它。
有任何功能性解决方案吗?
答案 0 :(得分:1)
由于无法将图片上传到评论中,我在答案中张贴了一张图片。我只是想确保你在评论中知道我的意思。如果您这样做了和/或这对您没有帮助,请告诉我,我将删除此答案。
这就是我通过UI增加列宽的意思。如GIF中所示,在我能够调整第二列的大小之前,我确实需要向右滚动一点。这可能是因为首次渲染表时,“屏幕外”会有1或2个像素。
以下是我用来创建此示例的代码(Java 10):
public class TestApplication extends Application {
@Override
@SuppressWarnings("unchecked")
public void start(Stage primaryStage) throws Exception {
var table = new TableView<>(FXCollections.observableArrayList(
new Person("John", "SomeGuyWithAReallyObnoxiouslyLongLastName"),
new Person("Jane", "Smith")
));
var firstNameCol = new TableColumn<Person, String>("First Name");
firstNameCol.setCellValueFactory(v -> v.getValue().firstNameProperty());
var lastNameCol = new TableColumn<Person, String>("Last Name");
lastNameCol.setCellValueFactory(v -> v.getValue().lastNameProperty());
table.getColumns().addAll(firstNameCol, lastNameCol);
table.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
primaryStage.setOnShown(we -> {
we.consume();
firstNameCol.setPrefWidth(table.getWidth() / 2.0);
lastNameCol.setPrefWidth(table.getWidth() / 2.0);
});
var root = new StackPane(table);
root.setPadding(new Insets(30.0));
var scene = new Scene(root, 560.0, 360.0);
primaryStage.setScene(scene);
primaryStage.setTitle("People");
// primaryStage.setResizable(false);
primaryStage.show();
}
public static class Person {
private final StringProperty firstName = new SimpleStringProperty(this, "firstName");
public final void setFirstName(String name) { firstName.set(name); }
public final String getFirstName() { return firstName.get(); }
public final StringProperty firstNameProperty() { return firstName; }
private final StringProperty lastName = new SimpleStringProperty(this, "lastName");
public final void setLastName(String name) { lastName.set(name); }
public final String getLastName() { return lastName.get(); }
public final StringProperty lastNameProperty() { return lastName; }
public Person(String firstName, String lastName) {
setFirstName(firstName);
setLastName(lastName);
}
}
}