Есть ли способ сделать кнопки кликабельными при использовании BorderPane и GridPane в одной сцене? - PullRequest
0 голосов
/ 12 мая 2019

Я пишу программу для проекта класса, где нам нужно создать приложение «Регистрация курса», используя только 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();
    }
}
...