为什么JavaFX tableView的内容不完整?

时间:2018-04-16 07:14:55

标签: javafx tableview javafx-8

我正在尝试使用“塔形”列创建JavaFX TableView。有些列被覆盖,不能像这样看到:

scorll bar has already been at the end

在图片中,你可以看到,滚动条已经在最后,但仍然有一些列无法看到。

这是我的代码:

import java.util.LinkedList;
import java.util.Queue;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class PaneDemo extends Application {

    private TableView<String> table = new TableView<>();

    public static void main(String[] args) {
        launch(args);
    }

    private static int getTotal(int layer) {
        int total = 0;
        for(int i=1;i<=layer;i++) {
            int start = 1;
            for(int j=0;j<i;j++) {
                start *= 5;
            }
            total += start;
        }
        return total;
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());   
        AnchorPane anchorPane = new AnchorPane();
        anchorPane.setPrefWidth(900);
        anchorPane.setPrefHeight(600);
       table.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
        TableColumn<String, String> Test1 = new TableColumn<>("Test1");
        TableColumn<String, String> Test2 = new TableColumn<>("Test2");
        TableColumn<String, String> Test3 = new TableColumn<>("Test3");
        TableColumn<String, String> Test4 = new TableColumn<>("Test4");
        TableColumn<String, String> Test5 = new TableColumn<>("Test5");
        Queue<TableColumn<String, ?>> queue = new LinkedList<>();
        table.getColumns().addAll(Test1, Test2, Test3, Test4, Test5);
        table.getItems().add("test");
        queue.addAll(table.getColumns());
        int index = 0;
        while(index < getTotal(3)) {
            TableColumn<String, ?> root = queue.poll();
            TableColumn<String, String> test1 = new TableColumn<>("test1");
            TableColumn<String, String> test2 = new TableColumn<>("test2");
            TableColumn<String, String> test3 = new TableColumn<>("test3");
            TableColumn<String, String> test4 = new TableColumn<>("test4");
            TableColumn<String, String> test5 = new TableColumn<>("test5");
            root.getColumns().addAll(test1, test2, test3, test4, test5);
            queue.addAll(root.getColumns());
            index++;
        }
        while(!queue.isEmpty()) {
            generateCellFactory((TableColumn<String, String>) queue.poll());
        }    
        table.prefHeightProperty().bind(anchorPane.heightProperty());
        table.prefWidthProperty().bind(anchorPane.widthProperty());
        anchorPane.getChildren().add(table);
        ((Group) scene.getRoot()).getChildren().addAll(anchorPane);
        stage.setScene(scene);
        stage.show();
    }

    private void generateCellFactory(TableColumn<String, String> column) {
        column.setCellFactory(cell -> {
            return new TableCell<String, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    setText("Test");
                }
            };
        });
    }
}

我不确定我是否清楚地描述了这个问题。任何一个Engilish比我好的人,你都可以编辑这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。 如果列prefwidthdouble,或者您没有为最后一个图层列设置prefwidth,那么它会很开心。