繁体   English   中英

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

[英]Why is JavaFX tableView's content incomplete?

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

滚动条已经到了最后

图中可以看到,滚动条已经到了最后,但是还有一些栏目是看不到的。

这是我的代码:

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");
                }
            };
        });
    }
}

我终于找到了答案。 它happans当列prefwidthdouble或您没有设置prefwidth的最后一层列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM