[英]BorderPane won't show ListView JavaFx
I have a window formed from a BorderPane at base, a VBox for the West Side where I place some labels, another VBox for the East Sidewhere I place a textfield and a ListView, a HBox with some buttons place in South. 我有一个由BorderPane底部形成的窗口,一个用于放置一些标签的West Side的VBox,一个用于放置文本字段和ListView的East Side的VBox,一个在南部放置一些按钮的HBox。
The problem is that anyhow I place this ListView I can see just a line. 问题是无论如何我放置此ListView我只能看到一行。 The ListView is populated. 将填充ListView。
If I use GridPane it shows the ListView but everything is placed wrong. 如果我使用GridPane,它会显示ListView,但所有内容均放置错误。
This is how it looks with BorderPane: BorderPane的外观如下:
Here is the code: 这是代码:
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();
Here is an mcve which makes debugging and getting help much easier : 这是一个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());
}
}
Run it, and see the problem. 运行它,然后查看问题。
Remove righta.setAlignment(Pos.BASELINE_LEFT);
删除righta.setAlignment(Pos.BASELINE_LEFT);
and see it resolved. 并解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.