带水平滚动的JavaFX 8 Tableview

时间:2017-01-03 15:22:32

标签: java tableview scrollbar javafx-8 horizontal-scrolling

如何制作水平滚动条而不是将所有列压缩到极小的最小尺寸?您还应该能够无限制地调整列的大小(并调整水平滚动条)。

No horizontal scrolling bar appears

1 个答案:

答案 0 :(得分:2)

要使列采用其首选大小而不是将其缩小到可用屏幕大小,您可以将columnResizePolicy设置为UNCONSTRAINED_RESIZE_POLICY

tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY); 

由于这是默认行为,因此您必须在某处将columnResizePolicy设置为CONSTRAINED_RESIZE_POLICY

更新

这是一个MCVE,它展示了如何在TableView中获得水平ScrollBar。您可以看到我没有设置columnResizePolicy,因为UNCONSTRAINED_RESIZE_POLICY是由默认设置的。

添加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;
        }
    }
}