From 5454ac5a5c442661ac6164eec423d7fb381033b8 Mon Sep 17 00:00:00 2001 From: rdavidek Date: Sun, 18 Jan 2026 11:38:05 +0100 Subject: [PATCH] button switch with arrows --- src/main/java/cz/kamma/kfmanager/MainApp.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/cz/kamma/kfmanager/MainApp.java b/src/main/java/cz/kamma/kfmanager/MainApp.java index 817a77e..656fd16 100644 --- a/src/main/java/cz/kamma/kfmanager/MainApp.java +++ b/src/main/java/cz/kamma/kfmanager/MainApp.java @@ -3,6 +3,9 @@ package cz.kamma.kfmanager; import cz.kamma.kfmanager.ui.MainWindow; import javax.swing.*; +import java.awt.*; +import java.awt.event.AWTEventListener; +import java.awt.event.KeyEvent; /** * Main application class for KF File Manager @@ -21,6 +24,9 @@ public class MainApp { } catch (Exception e) { e.printStackTrace(); } + + // Enable arrow key navigation in JOptionPane dialogs + setupGlobalKeyNavigation(); // Start GUI in Event Dispatch Thread SwingUtilities.invokeLater(() -> { @@ -28,4 +34,39 @@ public class MainApp { mainWindow.setVisible(true); }); } + + private static void setupGlobalKeyNavigation() { + Toolkit.getDefaultToolkit().addAWTEventListener(event -> { + if (event instanceof KeyEvent) { + KeyEvent ke = (KeyEvent) event; + if (ke.getID() == KeyEvent.KEY_PRESSED) { + int code = ke.getKeyCode(); + if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_RIGHT) { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + if (focusOwner instanceof JButton) { + if (isInsideJOptionPane(focusOwner)) { + if (code == KeyEvent.VK_LEFT) { + focusOwner.transferFocusBackward(); + } else { + focusOwner.transferFocus(); + } + ke.consume(); + } + } + } + } + } + }, AWTEvent.KEY_EVENT_MASK); + } + + private static boolean isInsideJOptionPane(Component c) { + Component parent = c; + while (parent != null) { + if (parent instanceof JOptionPane) { + return true; + } + parent = parent.getParent(); + } + return false; + } }