在同一场景中使用BorderPane和GridPane时,是否可以使按钮可单击?

时间:2019-05-12 05:17:12

标签: java javafx grid

我正在为一个班级项目编写程序,我们只需要使用JavaFX(而不是Swing或AWT)来制作“课程注册”应用程序。对于其中一个Java类,我们需要添加一个菜单栏。将本站点和其他来源的一些教程拼凑在一起后,我设法获得了正确的设置,但是现在我的按钮不起作用了。 MenuBar附加到BorderPane对象,其余的附加到GridPane对象。

我对JavaFX还是很陌生,我敢肯定这里的设置有问题,但是我一生都无法弄清楚自己在做什么错。

有人介意看一下并帮助我看看我做错了什么吗?我真的很感激。谢谢!

import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;

public class MyClasses extends Application 
{

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

    @Override
    public void start(Stage primaryStage) 
    {
        primaryStage.setTitle("JavaFX Welcome");
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        Text scenetitle = new Text("Welcome");
        scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
        grid.add(scenetitle, 0, 0, 2, 1);

        Button addBtn = new Button("Add");
        HBox hbBtn = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn.getChildren().add(addBtn);
        grid.add(hbBtn, 1, 10);

        final Text actiontarget = new Text();
        grid.add(actiontarget, 1, 6);

        Button logBtn = new Button("Remove");
        HBox hbBtn2 = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_LEFT);
        hbBtn.getChildren().add(logBtn);
        grid.add(hbBtn2, 1, 10);

        addBtn.setOnAction(new EventHandler<ActionEvent>() 
        {
            @Override
            public void handle(ActionEvent e) 
            {
                Platform.exit();
            }
        });

        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 300, 275);

        ObservableList<String> items = FXCollections.observableArrayList();

        ListView<String> lv = new ListView<>(items); 
        lv.setPrefSize(200, 100);

        grid.add(lv, 1, 5);    

        MenuBar menuBar = new MenuBar();

        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
        root.setTop(menuBar);
        root.setCenter(grid);

        // File menu - manage classes, exit
        Menu manageMenu = new Menu("Manage Classes");
        MenuItem addMenuItem = new MenuItem("Add");
        MenuItem removeMenuItem = new MenuItem("Remove");

        manageMenu.getItems().addAll(addMenuItem, removeMenuItem);

        Menu exitMenu = new Menu("Exit");
        MenuItem exitItem = new MenuItem("Exit");

        exitMenu.getItems().addAll(exitItem);
        exitItem.setOnAction(actionEvent -> Platform.exit());

        menuBar.getMenus().addAll(manageMenu, exitMenu);

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

0 个答案:

没有答案