首页 > 解决方案 > GridPane add() 未设置列跨度

问题描述

我在 JavaFX 中有一个小项目。我正在尝试构建一个 GridPane,并且我想添加一个具有列跨度的 ChoiceBox。我想像第一个一样大,但似乎有些东西不好。

    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) {

    }
}

我将附上输出的屏幕。 输出

标签: javajavafxgridpane

解决方案


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。在我看来,它有效,但会导致混乱。


推荐阅读