大家好。我是新人,我在编程的时候于到了一个问题一直无法解决。
程序是这样的,我写了个记事本。本想用CTRL+H的组合热来激发菜单点击,代码vk 下:
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK));
但事与愿违,这当好是系统的热键,当按下这个组合键时,成了系统默认的退格工功,而不是我自己定意的Action事件。郁闷死了,望高手帮忙啊。谢谢了。

解决方案 »

  1.   

    如果是系统的热键的话,那就没有办法了,系统会按收到,这个时候JAVA就按收不到的我以前也碰到此种事情.只有换一个热键了
      

  2.   

    这个跟我上次碰到的Ctrl + V 是一样的,要屏蔽系统的热键,只要重写系统热键的实现方法就可以了。
      

  3.   

    Quote:
    这个跟我上次碰到的Ctrl + V 是一样的,要屏蔽系统的热键,只要重写系统热键的实现方法就可以了。
    Quote:

    请问这位高人怎么样重写,能否给个具体的例子,先谢谢了。
      

  4.   

    你可以在你的TextArea 或者 TextPane里面添加事件监听Ctrl+h 
    就会屏蔽系统默认的你可以用addKeyListener
    也可以用InputMap和ActionMap
      

  5.   

    TextArea加addKeyListener不考虑。达不到较果;
    下面方法行不通,还是系统热键代替了自定义热键。下面方法代码如下。我想我应该没写错代码。
    public class test5 {
    public static void main(String[] args) {
    JFrame f = new JFrame();
    JTextArea ta = new JTextArea();
    f.setBounds(100, 100, 400, 300);
    f.add(new JScrollPane(ta));
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    InputMap imap = ta.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK),"abc");
    ActionMap amap = ta.getActionMap();
    amap.put("abc", new Test5Action());
    } static class Test5Action extends AbstractAction {
    public void actionPerformed(ActionEvent e) {
    System.out.println("自定义事件");
    }
    }
    }
      

  6.   

    刚试了下
    keylistener 确实不能屏蔽系统热键InputMap ActionMap 可以  Ctrl + c  Ctrl + v Ctrl + H 通过/**
     * 
     */
    package test4;import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.InputMap;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTextArea;
    import javax.swing.KeyStroke;public class test2
    {
        public static void main(String[] args)
        {
            JFrame f = new JFrame("test");        JMenuBar menuBar = new JMenuBar();        JMenu menu = new JMenu("Test");        menuBar.add(menu);        JMenuItem menuItem = new JMenuItem("test");
            menuItem.addActionListener(new ActionListener()
            {            public void actionPerformed(ActionEvent e)
                {
                    System.out.println("1233333333333");
                }        });
            menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
                    KeyEvent.CTRL_DOWN_MASK));
            menu.add(menuItem);        f.setJMenuBar(menuBar);
            
            JTextArea area = new JTextArea();
            
            ActionMap actionMap = area.getActionMap();
            InputMap inputMap = area.getInputMap();
            
            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_DOWN_MASK), "CTRL_H");
            actionMap.put("CTRL_H", new AbstractAction(){            public void actionPerformed(ActionEvent e)
                {
                    System.err.println("123333333333");
                    
                    
                }});
            
            f.add(area);        f.setSize(500, 500);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);    }
    }
      

  7.   

    win键 又不能屏蔽
    这个可能跟area底层有关系~~
      

  8.   

    xinxin821103() ( )你的代码不行 是因为JScrollPane 本身不能获得焦点
    你把JScrollPane或者JFrame  setFocusable(true) 使能获得焦点