2
私はswing
アプリケーション、カスタマイズされたJMenuBar
ありアクセラレータが機能していないコマンド
を次のようしています。コードは以下になり
、
public class MenuBarTest {
public static void main(String[] args) {
new JFXPanel();
final JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.getContentPane().add(new JTextField("Testing", JLabel.CENTER),
BorderLayout.CENTER);
frame.setJMenuBar(new DummyMenuBar());
frame.setSize(300, 300);
frame.setVisible(true);
}
}
DummyMenuBar.java
public class DummyMenuBar extends JMenuBar {
private MenuBar menuBar;
private MenuItem menuItem;
public DummyMenuBar() {
try {
addToScene();
} catch (Exception e) {
}
}
private void addToScene() {
final JFXPanel menuFxPanel = new JFXPanel();
add(menuFxPanel);
Platform.setImplicitExit(false);
Platform.runLater(() -> {
Scene scene = new Scene(new VBox(), 400, 20);
initMenuItem();
((VBox) scene.getRoot()).getChildren().addAll(menuBar);
menuFxPanel.setScene(scene);
});
}
private void initMenuItem() {
menuBar = new MenuBar();
menuItem = new MenuItem("Item 1");
menuItem.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN));
Menu menu1 = new Menu("Dummy 1");
menu1.getItems().add(menuItem);
menuBar.getMenus().add(menu1);
menuItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println(".handle()");
}
});
}
}
問題があり、 アクセラレータコマンド(はCtrl + Sは)のみ作品Menubarにフォーカスがあります。JTextField
をクリックすると(フォーカスが得られます)、アクセラレータコマンド は機能しません。
もう一度動作させるには、もう一度MenuBar
をクリックしてフォーカスを得る必要があります。
JavaFX
をJmenuBar
(DummyMenuBar.java)以上のアイテムに追加しましたが、正確な根本原因が不明なため、関連付けることができます。
どうすればこの問題を解決できますか?
[これ](http://stackoverflow.com/questions/28239019/javafx-accelerator-not-working-when-textfield-has-focus?rq=1)をチェックしました – Madhan
@Madhanはい私は試しましたが、フォーカスが 'JFXPanel'になければ、まだ動作しません。 'JFXPanel'は 'JComponent'を継承しているので、キーイベントをキャプチャするためにフォーカスが必要です。 – user3164187