gpt4 book ai didi

JavaFX:设置每列最小宽度

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:13 25 4
gpt4 key购买 nike

我正在尝试将每列的最小宽度设置为 100 像素。我更喜欢使用 tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

解释

If you set TableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY) all columns will be equally resized until the TableViews maximum width is reached.

Explanation from

目前每列的宽度由 TableView 的宽度除以列数决定。

我试图将每一列设置为最小宽度,但没有奏效。我还看到人们刚刚为 setColumnResizePolicy 创建了他们自己的回调,但我无法实现我对应该发生什么的想法。

MCVE

public class MCVE extends Application {

private Scene mainScene;
private Stage mainStage;
private Label filename;
private VBox mainBox;

private TableView<String> tableView;

private Button open;
private Button save;
private Button neu;
private Button settings;
private Button table;
private Button row;
private Button column;
private Button date;

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

@Override
public void start(Stage primaryStage) throws Exception {

initButton();
initTable();

mainStage = new Stage();
filename = new Label("Nr. 100 - Test Data (Applikation: TEST)");
mainScene = new Scene(mainVBox(), 1200, 600);


tableView.prefWidthProperty().bind(mainBox.widthProperty());
tableView.prefHeightProperty().bind(mainBox.heightProperty());

mainStage.setScene(mainScene);
mainStage.show();
}

private GridPane mainGrid() {

GridPane gridPane = new GridPane();
gridPane.setVgap(10);
gridPane.setHgap(10);

gridPane.add(filename, 0, 0);
gridPane.add(buttonBox(), 0, 1);
gridPane.add(tableView, 0, 2);

return gridPane;
}

private VBox buttonBox() {

VBox buttonBox = new VBox();

HBox firstRowBox = new HBox();
HBox secRowBox = new HBox();

firstRowBox.getChildren().addAll(open, save, neu, settings);
firstRowBox.setSpacing(5);
secRowBox.getChildren().addAll(table, row, column, date);
secRowBox.setSpacing(5);

buttonBox.getChildren().addAll(firstRowBox, secRowBox);
buttonBox.setSpacing(5);
buttonBox.prefWidthProperty().bind(mainBox.widthProperty());

return buttonBox;
}

private VBox mainVBox() {

mainBox = new VBox();

mainBox.prefWidthProperty().bind(mainStage.widthProperty().multiply(0.8));

mainBox.setPadding(new Insets(10, 10, 10 ,10));
mainBox.getChildren().add(mainGrid());

return mainBox;
}

private void initButton() {

open = new Button("Open");
open.setPrefWidth(100);
save = new Button("Save");
save.setPrefWidth(100);
neu = new Button("New");
neu.setPrefWidth(100);
settings = new Button("Settings");
settings.setPrefWidth(100);
table = new Button("Table");
table.setPrefWidth(100);
row = new Button("Row");
row.setPrefWidth(100);
column = new Button("Column");
column.setPrefWidth(100);
date = new Button("Date");
date.setPrefWidth(100);
}


private TableView initTable() {
tableView = new TableView<>();

// Create column UserName (Data type of String).
TableColumn<String, String> userNameCol //
= new TableColumn<>("User Name");

// Create column Email (Data type of String).
TableColumn<String, String> emailCol//
= new TableColumn<>("Email");

// Create 2 sub column for FullName.
TableColumn<String, String> firstNameCol //
= new TableColumn<>("First Name");

TableColumn<String, String> lastNameCol //
= new TableColumn<>("Last Name");


// Active Column
TableColumn<String, Boolean> activeCol//
= new TableColumn<>("Active");

tableView.getColumns().addAll(userNameCol, emailCol, firstNameCol, lastNameCol, activeCol);

for (int i = 0; tableView.getColumns().size() < i; i++){

tableView.getColumns().get(i).setMinWidth(100);
}

tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

return tableView;
}
}

最后,我希望在加载文件后,列的宽度仍应为 TableView 宽度除以列数,预计宽度将小于 100 像素。在这种情况下,每个宽度都应为 100px,并出现一个滚动 Pane (此处忽略滚动条)。

感谢您的帮助!

最佳答案

您的最小宽度限制从未设置...

只需替换这个:

 for (int i = 0; tableView.getColumns().size() < i; i++){

为此:

 for (int i = 0; i < tableView.getColumns().size(); i++) {

或者更好地使用 forEach:

 tableView.getColumns().forEach(column -> column.setMinWidth(100));

关于JavaFX:设置每列最小宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com