[英]JavaFX Hbox of buttons won't fill space of bottom container in BorderPane
[英]BorderPane won't show ListView JavaFx
我有一個由BorderPane底部形成的窗口,一個用於放置一些標簽的West Side的VBox,一個用於放置文本字段和ListView的East Side的VBox,一個在南部放置一些按鈕的HBox。
問題是無論如何我放置此ListView我只能看到一行。 將填充ListView。
如果我使用GridPane,它會顯示ListView,但所有內容均放置錯誤。
BorderPane的外觀如下:
這是代碼:
window2.setTitle("Update Category");
List<Skill> listSlill=(new SkillCrud()).allS();
ObservableList<Skill> items = FXCollections.observableArrayList
(listSlill);
skillListView = new ListView<>(items);
//System.out.println((new SkillCrud()).allS()+" -- "+skillListView.getItems());
Label categoryLabel = new Label("Category: ");
categoryLabel.setFont(Font.font("Arial", FontWeight.BOLD, 14));
categoryLabel.setTranslateY(30);
Label skillLabel = new Label("Skill: ");
skillLabel.setFont(Font.font("Arial", FontWeight.BOLD, 14));
skillLabel.setTranslateY(40);
TextField categoryField = new TextField();
categoryField.setText(up.getName());
VBox lefta = new VBox();
lefta.getChildren().addAll(categoryLabel,skillLabel);
//lefta.setPadding(new Insets(0, 0, 0, 30));
VBox righta = new VBox();
righta.getChildren().addAll(categoryField,skillListView);
HBox downa = new HBox();
Button updateButton = new Button("Update");
Button cancelButton = new Button("Cancel");
updateButton.setMaxWidth(Double.MAX_VALUE);
cancelButton.setMaxWidth(Double.MAX_VALUE);
cancelButton.setPrefSize(75, 20);
cancelButton.setTranslateX(20);
updateButton.setPrefSize(75, 20);
updateButton.setTranslateX(45);
downa.setSpacing(40);
//downa.setPadding(new Insets(0, 10, 8, 25));
downa.getChildren().addAll(cancelButton, updateButton);
//righta.setSpacing(10);
//righta.setPadding(new Insets(20, 30, 0, 0));
righta.setAlignment(Pos.BASELINE_LEFT);
// GridPane grid = new GridPane();
//
// grid.setAlignment(Pos.CENTER);
// grid.setHgap(10);
// grid.setVgap(10);
// grid.setPadding(new Insets(25, 25, 25, 25));
//
//
// grid.add(categoryLabel, 0, 1, 2, 2);
// grid.add(categoryField, 1, 1, 2, 2);
//
// grid.add(skillLabel, 0, 2);
// grid.add(skillListView, 1, 2);
BorderPane layout = new BorderPane();
layout.setLeft(lefta);
layout.setRight(righta);
layout.setBottom(downa);
Scene scene2 = new Scene(layout, 300, 300);
// window2.setMaxWidth(300);
// window2.setMaxHeight(300);
// window2.setMinWidth(300);
// window2.setMinHeight(300);
window2.setScene(scene2);
window2.showAndWait();
這是一個mcve ,它使調試和獲得幫助變得更加容易:
public class StageTest extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Update Category");
ObservableList<String> items
= FXCollections.observableArrayList(createStrings());
ListView<String> skillListView = new ListView<>(items);
TextField categoryField = new TextField();
categoryField.setText("Category");
VBox righta = new VBox();
righta.getChildren().addAll(categoryField,skillListView);
righta.setAlignment(Pos.BASELINE_LEFT);
BorderPane layout = new BorderPane();
layout.setRight(righta);
Scene scene2 = new Scene(layout, 300, 300);
stage.setScene(scene2);
stage.show();
}
private List<String> createStrings() {
return IntStream.rangeClosed(0, 5)
.mapToObj(i -> "Skill "+i)
.map(String::new)
.collect(Collectors.toList());
}
}
運行它,然后查看問題。
刪除righta.setAlignment(Pos.BASELINE_LEFT);
並解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.