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

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

        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,3,1);


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

    @Override
    public void handle(ActionEvent actionEvent) {

    }
}

我会附上输出的屏幕。 Output

解决方法

在纯代码中使用 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));

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

        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,1);

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

    @Override
    public void handle(ActionEvent actionEvent)
    {

    }
}

enter image description here

补充一点:如果您正在学习 implements EventHandler<ActionEvent>,我建议您不要使用 JavaFX。在我看来,它有效但会导致混乱。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...