Ich habe die folgende swing
Anwendung,Accelerator-Befehle funktionieren nicht, wenn der Fokus verloren
, die eine maßgeschneiderte JMenuBar
hat.
Der folgende Code ist
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()");
}
});
}
}
Die Frage geht, Die Beschleuniger Befehle (Strg + S) funktioniert nur, wenn die Menüleiste hat Fokus.Wenn ich auf die JTextField
klicken (es erhält Fokus) und Beschleunigerbefehle funktioniert nicht.
Damit es wieder funktioniert muss ich noch einmal auf den MenuBar
klicken um den Fokus zu bekommen.
Ich kann es beziehen, weil ich JavaFX
Artikel über JmenuBar
(DummyMenuBar.java) hinzugefügt habe, aber nicht sicher über genaue Ursache.
Wie kann ich das lösen?
Haben Sie überprüft [this] (http://stackoverflow.com/questions/28239019/javafx-accelerator-not-working-when-textfield-has-focus?rq=1) – Madhan
@Madhan Ja, ich habe versucht, Es funktioniert immer noch nicht, wenn der Fokus nicht auf "JFXPanel" liegt. Da 'JFXPanel' 'JComponent' erweitert, erwartet es, dass der Fokus Schlüsselereignisse erfasst. – user3164187