简体   繁体   中英

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.

The problem is that anyhow I place this ListView I can see just a line. The ListView is populated.

If I use GridPane it shows the ListView but everything is placed wrong.

This is how it looks with 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 :

 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); and see it resolved.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM