我正在尝试使用“塔形”列创建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");
}
};
});
}
}
我不确定我是否清楚地描述了这个问题。任何一个Engilish比我好的人,你都可以编辑这个问题。谢谢!
答案 0 :(得分:0)
我终于找到了答案。
如果列prefwidth
为double
,或者您没有为最后一个图层列设置prefwidth
,那么它会很开心。