简体   繁体   English

按钮未出现在GridPane JavaFX8中

[英]Buttons not appearing in GridPane JavaFX8

I am declaring buttons prior to using them inside the GridPane so I can use the button.setOnAction() function to switch scenes, but the buttons don't appear. 我在GridPane中使用按钮之前先声明它们,以便可以使用button.setOnAction()函数切换场景,但按钮不会出现。

When I create the button inside the gridpane.add() function it works just fine. 当我在gridpane.add()函数内部创建按钮时,它就可以正常工作。 I've tried using BorderPanes instead and doing the non-lambda version of the EventHandler. 我试过使用BorderPanes代替,并做EventHandler的非lambda版本。

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Main extends Application {

    public static Scene scene1;
    public static Scene scene2;
    public static Scene scene3;
    public static Scene[] scenes = new Scene[]{null, scene1, scene2, scene3};

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Scene Switcher");

        GridPane gp1 = new GridPane();
        GridPane gp2 = new GridPane();
        GridPane gp3 = new GridPane();

        Button button1 = new Button("scene 1");
        button1.setOnAction(event -> primaryStage.setScene(scene1));
        Button button2 = new Button("scene 2");
        button2.setOnAction(event -> primaryStage.setScene(scene2));
        Button button3 = new Button("scene 3");
        button3.setOnAction(event -> primaryStage.setScene(scene3));

        //
        // SCENE 1
        //
        Label l1 = new Label("this is scene 1");
        BorderPane.setAlignment(l1, Pos.CENTER);
        gp1.add(l1, 0, 0);
        gp1.add(button2, 0, 2);
        gp1.add(button3, 0, 3);
        scene1 = new Scene(gp1, 500, 500);

        //
        // SCENE 2
        //
        Label l2 = new Label("this is scene 2");
        BorderPane.setAlignment(l2, Pos.CENTER);
        gp2.add(l2, 0, 0);
        gp2.add(button1, 0, 2);
        gp2.add(button3, 0, 3);
        scene2 = new Scene(gp2, 500, 500);

        //
        // SCENE 3
        //
        Label l3 = new Label("this is scene 3");
        BorderPane.setAlignment(l3, Pos.CENTER);
        gp3.add(l3, 0, 0);
        gp3.add(button1, 0, 2);
        gp3.add(button2, 0, 3);
        scene3 = new Scene(gp3, 500, 500);

        primaryStage.setScene(scene1);
        primaryStage.show();
    }
}

The buttons don't show at all. 这些按钮根本不显示。

Your Button nodes can only belong to one GridPane at a time. 您的Button节点一次只能属于一个GridPane Here, you're adding them to gp2 and gp3 after adding them to gp1 . 在这里,你将它们添加到gp2gp3它们添加到后gp1

You'll need to rethink your design for this Stage as the way you're attempting to do it is not possible. 您将需要重新考虑此Stage的设计,因为尝试这种方式是不可能的。

You can confirm this by commenting out all the code for scenes 2 & 3. The buttons will appear as they should. 您可以通过注释掉场景2和3的所有代码来确认这一点。按钮将按原样出现。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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