Как установить горизонтальную полосу прокрутки для TableView? - PullRequest
0 голосов
/ 04 мая 2018

У меня проблема с моим tableView. В моем табличном представлении есть два столбца, и строки во втором являются путями к файлам. Поэтому я хотел бы реализовать полосу прокрутки, чтобы прокручивать весь путь, поскольку размер tableView фиксирован.

Я добавил setColumnResizePolicy (TableView.UNCONSTRAINED_RESIZE_POLICY); Он показывает полосу прокрутки, но я не могу переместить ее.

Есть ли функциональное решение?

enter image description here

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку невозможно загрузить изображение в комментарий, я публикую его в ответе. Я просто хочу убедиться, что вы знали, что я имел в виду в своем комментарии. Если вы это сделали и / или это вам не поможет, дайте мне знать, и я удалю этот ответ.

Это то, что я имел в виду, увеличив ширину столбца через пользовательский интерфейс. Как показано в GIF, мне пришлось немного прокрутить вправо, прежде чем я смог изменить размер второго столбца. Вероятно, это связано с тем, что при первом отображении таблицы 1 или 2 пикселя находятся за пределами экрана.

enter image description here

Вот код, который я использовал для создания этого примера (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);
        }

    }

}
...