GridPane add() не устанавливает диапазон столбцов

#java #javafx #gridpane

#java #javafx #gridpane

Вопрос:

У меня есть небольшой проект на JavaFX. Я пытаюсь создать сетчатую панель и хочу добавить поле выбора с диапазоном столбцов. Я бы хотел быть большим, как первый, но, похоже, что-то не так.

     public class Main extends Application  implements EventHandler<ActionEvent> {

    Label sol=new Label();
    TextField ca=new TextField(),
            cb=new TextField();

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

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

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        ChoiceBox localitateBox = new ChoiceBox();
        ArrayList listStrings = new ArrayList();
        listStrings.add("TEST CHOICE BOX 1");
        listStrings.add("TEST CHOICE BOX 2");
        localitateBox.getItems().addAll(listStrings);
        grid.add(localitateBox, 0, 0);

        TextField numeText =new TextField();
        numeText.setPromptText("Name");
        grid.add(numeText,1,0);

        ChoiceBox functionBox = new ChoiceBox();
        functionBox.getItems().add("Add");
        functionBox.getItems().add("Print");
        functionBox.getItems().add("Info");


        grid.add(functionBox,0,1,3,1);


        Scene scena = new Scene(grid, 500, 400);
        primaryStage.setScene(scena);
        primaryStage.setTitle("TEST");
        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent actionEvent) {

    }
}
 

Я приложу скрин выходных данных.
Вывод

Комментарии:

1. Что вы сделали, чтобы установить диапазон столбцов?

Ответ №1:

При работе с Gridpane чистым кодом вы должны показывать линии сетки. Это поможет вам при создании GridPane . Линии сетки должны использоваться только для отладки, а не в вашем производственном коде!

Похоже, вам не нужно его использовать column-span . Вам нужно убедиться ChoiceBox , что крышки соответствуют ширине. Использовать setMaxWidth(Double.MAX_VALUE); .

 import java.util.ArrayList;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class App extends Application implements EventHandler<ActionEvent>
{

    Label sol = new Label();
    TextField ca = new TextField();
    TextField cb = new TextField();

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

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

        GridPane grid = new GridPane();
        grid.setGridLinesVisible(true);
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        ChoiceBox localitateBox = new ChoiceBox();
        ArrayList listStrings = new ArrayList();
        listStrings.add("TEST CHOICE BOX 1");
        listStrings.add("TEST CHOICE BOX 2");
        localitateBox.getItems().addAll(listStrings);
        grid.add(localitateBox, 0, 0);

        TextField numeText = new TextField();
        numeText.setPromptText("Name");
        grid.add(numeText, 1, 0);

        ChoiceBox functionBox = new ChoiceBox();
        functionBox.setMaxWidth(Double.MAX_VALUE);
        functionBox.getItems().add("Add");
        functionBox.getItems().add("Print");
        functionBox.getItems().add("Info");

        grid.add(functionBox, 0, 1);

        Scene scena = new Scene(grid, 500, 400);
        primaryStage.setScene(scena);
        primaryStage.setTitle("TEST");
        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent actionEvent)
    {

    }
}
 

введите описание изображения здесь

Просто добавленное примечание: я не рекомендую implements EventHandler<ActionEvent> , если вы учитесь JavaFX . На мой взгляд, это работает, но приводит к путанице.