BorderPane不会显示ListView JavaFx

时间:2017-06-11 14:28:26

标签: java user-interface javafx javafx-2

我有一个由BasePane在底部形成的窗口,一个用于西侧的VBox,我放置一些标签,另一个用于东侧的VBox,我放置一个文本字段和一个ListView,一个带有一些按钮放在南方的HBox。 / p>

问题是无论如何我放置这个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();

1 个答案:

答案 0 :(得分:0)

这是一个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);并查看其已解决。