relative660 2010-05-07 10:21
浏览 334
已采纳

关于swing控件快捷键的疑问(比较急)

我的swing界面里有几个JSplitPane控件,这种控件的默认快捷键(F8)是会在多个JSplitPane之间切换。
而JTabbedPane控件的默认快捷键(ctrl+tab)会在多个标签页之间切换。
现在我想让快捷键F8和ctrl+tab做我自己定义的事情(如弹出一个窗口之类的)。但是,我试过setAccelerator方法和用ActionMap来映射快捷键动作,但是效果还是swing自带的动作,没有执行我定义的动作。但如果我把快捷键定义为不和控件默认快捷键相同如(alt+r),就会执行我自己定义的动作。

想请问下swing达人,我要怎么做才可以使界面上有JTabbedPane控件时,按快捷键(ctrl+tab),可以执行我自己定义的动作。

  • 写回答

2条回答 默认 最新

  • g_johnson_lee 2010-05-10 13:56
    关注

    怎么上面那段代码没有高亮显示?

    [code="java"]
    package org.zergle.test.swing;

    import java.awt.BorderLayout;

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;
    import javax.swing.JTabbedPane;
    import javax.swing.SwingUtilities;
    import javax.swing.UIDefaults;
    import javax.swing.UIManager;

    public class TestAccelerator extends JFrame {
    private JSplitPane pnl1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    private JTabbedPane pnl2 = new JTabbedPane();
    private JPanel container;

    public TestAccelerator() {
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.container = (JPanel) this.getContentPane();
        this.pnl1.add(new JPanel(), JSplitPane.LEFT);
        this.pnl1.add(new JPanel(), JSplitPane.RIGHT);
        this.pnl2.add("tab1", new JPanel());
        this.pnl2.add("tab2", new JPanel());
        this.container.add(pnl1, BorderLayout.NORTH);
        this.container.add(pnl2, BorderLayout.SOUTH);
        this.setSize(600, 400);
        this.setVisible(true);
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            UIManager.put(
                "TabbedPane.ancestorInputMap", 
                new UIDefaults.LazyInputMap(new Object[] {
                             "alt R", "navigateNext",
                       "alt shift R", "navigatePrevious",
                    "ctrl PAGE_DOWN", "navigatePageDown",
                      "ctrl PAGE_UP", "navigatePageUp",
                           "ctrl UP", "requestFocus",
                        "ctrl KP_UP", "requestFocus"
                })
            );
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestAccelerator();
            }
        });
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料