2017-06-20 10 views
1

ユーザーがメニュー項目をクリックすると、シーンを変更できるプログラムを作りたいと思います。例えばjavafxのメニューでイベントをクリック

Simple image of the program

uはメニューバーの設定をクリックすると、同じウィンドウ内の別のシーンが表示されます、あなたは、プログラムの設定を変更することができます。

注:マイメニューにはメニュー項目がありません。メニューバーはありません。

これまで何を試みましたか? いくつかのボタンをHBoxに追加して、BorderPaneの上にアライメントします。これは動作しますが、menu.Tryのようなものではありません。

何が問題ですか? メインメニューのクリックハンドラーが機能しません。 クリックイベントハンドラを割り当てボタンに割り当てても機能しますが、[設定]メニューには表示されません。

このアイデアを実装する最良の方法はなんですか?

+0

メニューは、イベントを生成しません。おそらくあなたの最善の策は、 'HBox'(または' ToolBar')にいくつかのボタン(あるいは単にラベル?)を追加し、それらをメニューとして表示するようにスタイルを設定することです。私はあなたが望むように働かせることができなければ、それを試みて、その仕事をするあなたの試みで特定の質問を投稿することをお勧めします。 –

答えて

1

以下は以前の私のプロジェクトのセクションです。 MenuItemは別のクラスにあり、メインではシーンを切り替えるメソッドを呼び出します。

私は2ページの選択と情報を持っていますが、どちらも独自のコンテナとシーンとスタイルシートを持っています。選択ページは、開始時に表示される最初のページで、Iスイッチ情報ページです。

settingsMenuItem.setOnAction(e -> { 
    e.consume(); 
    Launcher.selectionPage(); 
}); 

私のメインクラス:彼らは(残念ながら)空になっている場合

public class Launcher extends Application { 

    private static FlowPane selectionPane; 
    private static BorderPane infoPane; 
    private static Scene selectionScene, infoScene; 
    private static Stage theStage; 
    private static String selectionCSS; 
    private static String informationCSS; 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     //Global reference needed to switch scenes in another method. 
     this.theStage = primaryStage; 

     //Declares resources, in this case stylesheet. Declared here to be applied in another method 
     selectionCSS = this.getClass().getResource("/views/SelectionStyle.css").toExternalForm(); 
     informationCSS = this.getClass().getResource("/views/InformationStyle.css").toExternalForm(); 

     //Initial page setup 
     selectionPane = new SelectionPage(); 
     selectionScene = new Scene(selectionPane, 500, 500); 
     selectionScene.getStylesheets().add(selectionCSS); 

     //Stage setup 
     primaryStage.setScene(selectionScene); 
     primaryStage.show(); 
    } 


    //Changes page 
    public static void informationPage(String starSign) { 

     infoPane = new InformationPage(); 
     infoScene = new Scene(infoPane, 500, 270); 
     infoScene.getStylesheets().add(informationCSS); 
     theStage.setScene(infoScene); 
    } 
} 
関連する問題