gpt4 book ai didi

java - JRadioButton 使用箭头键导航

转载 作者:行者123 更新时间:2023-12-02 00:41:42 26 4
gpt4 key购买 nike

我试图让一组 JRadioButton 使用箭头键进行导航。我本来打算用 KeyListeners 手动实现这一点,但显然这种行为至少在过去 8 年里已经有效( http://bugs.sun.com/view_bug.do?bug_id=4104452 )。但是,它对我不起作用:按箭头键没有任何作用。 Windows 上的 Java 版本为 7u45。

一个独立的测试用例来看看我在说什么:

import java.awt.*;
import javax.swing.*;

public class Test {
public static void main(final String[] args) {
if (!EventQueue.isDispatchThread()) {
try {
EventQueue.invokeAndWait(new Runnable() {
public void run() {
main(args);
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return;
}

try {
//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable t) {
throw new RuntimeException(t);
}

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ButtonGroup group = new ButtonGroup();
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
JRadioButton rb;

rb = new JRadioButton("Option A");
panel.add(rb);
group.add(rb);

rb = new JRadioButton("Option B");
panel.add(rb);
group.add(rb);

rb = new JRadioButton("Option C");
panel.add(rb);
group.add(rb);

frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}

我尝试过使用不同的外观和感觉、不同的容器和不同的布局管理器,但它仍然不起作用。

最佳答案

您需要将右/左(上/下?)键添加到每个单选按钮的焦点遍历策略中。例如添加右/左箭头键:

    Set set = new HashSet( rb.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS ) );
set.add( KeyStroke.getKeyStroke( "RIGHT" ) );
rb.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set );

set = new HashSet( rb.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS ) );
set.add( KeyStroke.getKeyStroke( "LEFT" ) );
rb.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, set );

阅读 Swing 教程中关于 How to Use the Focus Subsystem 的部分了解更多信息。

关于java - JRadioButton 使用箭头键导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20273810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com