栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在没有修饰符的情况下为JRadioButton设置快捷键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在没有修饰符的情况下为JRadioButton设置快捷键

您如何将任何键绑定到Swing中的组件?按键绑定:按键绑定教程。

等一下,我看看您的代码…

例如

import java.awt.Component;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.ActionMap;import javax.swing.BoxLayout;import javax.swing.ButtonGroup;import javax.swing.InputMap;import javax.swing.JComponent;import javax.swing.Jframe;import javax.swing.JRadioButton;import javax.swing.KeyStroke;import javax.swing.SwingUtilities;public class RadioButtonSelectableByNumbers {    private Jframe frame;    private JRadioButton buttons[];    private ButtonGroup group;    public RadioButtonSelectableByNumbers() {    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     new RadioButtonSelectableByNumbers().createAndShowGui(); }        });    }    public void createAndShowGui() {        frame = new Jframe("frame");        frame.setDefaultCloseOperation(Jframe);        buttons = new JRadioButton[5];        group = new ButtonGroup();        frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));        for (int i = 0; i < buttons.length; i++) { JRadioButton rbtn = createButton(i); buttons[i] = rbtn; frame.getContentPane().add(rbtn);        }        frame.pack();        frame.setVisible(true);    }    private JRadioButton createButton(int i) {        String name = String.valueOf(i + 1);        int stdMnemonic = KeyEvent.VK_1 + i;  // for standard number keys        int numpadMnemonic = KeyEvent.VK_NUMPAD1 + i;  // for numpad number keys        Action action = new CustomAction(name, stdMnemonic);        JRadioButton rBtn = new JRadioButton(action);        group.add(rBtn);        // bindings active if window is focused. Component doesn't have to be focused        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;         InputMap inputMap = rBtn.getInputMap(condition);        ActionMap actionMap = rBtn.getActionMap();        KeyStroke keyStroke = KeyStroke.getKeyStroke(stdMnemonic, 0);        KeyStroke keyStroke2 = KeyStroke.getKeyStroke(numpadMnemonic, 0);        inputMap.put(keyStroke, keyStroke.toString());        actionMap.put(keyStroke.toString(), action);        inputMap.put(keyStroke2, keyStroke2.toString());        actionMap.put(keyStroke2.toString(), action);        return rBtn;    }    class CustomAction extends AbstractAction {        public CustomAction(String name, Integer mnemonic, Integer modifier) { super(name); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(mnemonic, modifier));        }        public CustomAction(String name, Integer mnemonic) { super(name); putValue(MNEMONIC_KEY, mnemonic);        }        @Override        public void actionPerformed(ActionEvent e) { System.out.println("radio clicked: " + e.getActionCommand());        }    }}

因为通常JRadioButton不使用ActionListeners,所以另一种可能更好的解决方案是创建一个简单地单击按钮的AbstractAction。在下面的示例中,MyAction会执行此操作,并为活动的JRadioButton提供焦点:

import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import javax.swing.*;@SuppressWarnings("serial")public class NumberActions extends JPanel {    private ButtonGroup buttonGroup = new ButtonGroup();    public NumberActions() {        ItemListener itemListener = new MyItemListener();        setLayout(new GridLayout(1, 0));        for (int i = 0; i < 10; i++) { JRadioButton rBtn = createRadioBtn(i); rBtn.addItemListener(itemListener); buttonGroup.add(rBtn); add(rBtn);        }    }    private JRadioButton createRadioBtn(int i) {        String text = String.valueOf(i);        JRadioButton rBtn = new JRadioButton(text);        rBtn.setActionCommand(text);        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;        InputMap inputMap = rBtn.getInputMap(condition);        ActionMap actionMap = rBtn.getActionMap();        Action action = new MyAction(rBtn);        bindAction(inputMap, actionMap, action, KeyEvent.VK_0 + i);        bindAction(inputMap, actionMap, action, KeyEvent.VK_NUMPAD0 + i);        return rBtn;    }    private void bindAction(InputMap inputMap, ActionMap actionMap, Action action, int mnemonic) {        KeyStroke keyStroke = KeyStroke.getKeyStroke(mnemonic, 0);        inputMap.put(keyStroke, keyStroke.toString());        actionMap.put(keyStroke.toString(), action);    }    private class MyItemListener implements ItemListener {        @Override        public void itemStateChanged(ItemEvent iEvt) { if (iEvt.getStateChange() == ItemEvent.SELECTED) {     AbstractButton btn = (AbstractButton) iEvt.getSource();     System.out.println("Button: " + btn.getActionCommand()); }        }    }    private class MyAction extends AbstractAction {        private AbstractButton btn;        public MyAction(AbstractButton btn) { this.btn = btn;        }        @Override        public void actionPerformed(ActionEvent e) { btn.requestFocusInWindow(); btn.doClick();        }    }    private static void createAndShowGui() {        NumberActions mainPanel = new NumberActions();        Jframe frame = new Jframe("NumberActions");        frame.setDefaultCloseOperation(Jframe.DISPOSE_ON_CLOSE);        frame.getContentPane().add(mainPanel);        frame.pack();        frame.setLocationByPlatform(true);        frame.setVisible(true);    }    public static void main(String[] args) {        SwingUtilities.invokeLater(() -> createAndShowGui());    }}

编辑:代码固定



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号