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

问题描述 投票:1回答:1

我正在尝试创建带有“塔形”列的JavaFX TableView。有些专栏已涵盖,无法像这样看到:

scroll 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");
                }
            };
        });
    }
}
javafx tableview javafx-8
1个回答
0
投票

我终于找到答案了。当列prefwidthdouble或没有为最后一层列设置prefwidth时,会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.