私はJavaFXアプリケーションを開発中です。私はメモ帳を書きたい。今私はメニューバーに取り組んでいます。私は、ファイルの管理、設定、編集などを担当して一つの大きなコントローラを持たないように、すべてのメニューのための一般的な一台のコントローラと複数の専門のコントローラを書きたいJavaFX:メニューコントローラを分割する方法は?
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<MenuBar id="menuBar" fx:id="menuBar" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.menu.MenuController">
<menus>
<Menu id="fileMenu" fx:id="fileMenu" mnemonicParsing="false" text="File">
<items>
<MenuItem id="newFileItem" fx:id="newFileItem" text="New Ctrl+N" />
<MenuItem id="openFileItem" fx:id="openFileItem" text="Open Ctrl+O" onAction="#openFile" />
<MenuItem id="saveFileItem" fx:id="saveFileItem" text="Save Ctrl+S" />
<MenuItem id="saveFileAsItem" fx:id="saveFileAsItem" text="Save file as... Ctrl+S"/>
</items>
</Menu>
<Menu id="editionMenu" fx:id="editionMenu" mnemonicParsing="false" text="Edit">
</Menu>
<Menu id="settingsMenu" fx:id="settingsMenu" mnemonicParsing="false" text="Settings">
</Menu>
<Menu id="helpMenu" fx:id="helpMenu" mnemonicParsing="false" text="Help">
</Menu>
</menus>
</MenuBar>
:これは私のMenu.fxmlファイルです。 これはMenuControllerある:
package controllers.menu;
import javafx.fxml.FXML;
import javafx.scene.control.MenuBar;
public class MenuController {
@FXML
private MenuBar menuBar;
private FileMenuController fileMenuController;
private EditMenuController editMenuController;
private SettingsMenuController settingsMenuController;
private HelpMenuController helpMenuController;
public MenuController() {
fileMenuController = new FileMenuController();
fileMenuController.setMenuBar(menuBar);
}
public void openFile(){
fileMenuController.openFile();
}
}
これはFileMenuControllerある:
package controllers.menu;
import javafx.scene.control.MenuBar;
import javafx.stage.FileChooser;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
class FileMenuController {
private MenuBar menuBar;
public void openFile() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open");
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("*.txt", "*.txt"),
new FileChooser.ExtensionFilter("All types", "*.*")
);
File file = fileChooser.showOpenDialog(menuBar.getScene().getWindow());
}
public void setMenuBar(MenuBar menuBar) {
this.menuBar = menuBar;
}
}私は、ファイルメニューのオープンオプションを選択すると
私はこれらの例外ました:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
at controllers.menu.FileMenuController.openFile(FileMenuController.java:23)
at controllers.menu.MenuController.openFile(MenuController.java:19)
は、誰も私にこの問題を解決するための方法をアドバイスのいくつかの作品を与えることはできますか?メニューコントローラーを分割する方がいいですか?すべてのコントローラーが1つのことだけに責任がありますか?
は、コンストラクタが呼び出さなっていますか? – matt
'fx:controller =" controllers.menu.FileMenuController "' – matt
などの特定のメニューに適切なタグを追加できますか?1つのfxmlファイルにはコントローラが1つしかないので、残念なことにすべてのメニュー項目にコントローラを追加できません。 – WojciechS