aboutMenu.setAccelerator(KeyStroke.getKeyStroke("ctrl A"));我在做一个文本框
为什么设置的快捷键无法运行?
在文本框按下快捷键的时候没有反应?
而在菜单栏上按下快捷键却有反应??尝试着在文本框中添加addKeyListener 来实现按下快捷键产生的动作,但最后还是宣告无效。请问应该如何实现快捷键??

解决方案 »

  1.   

    setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
      

  2.   

    不是不响应,是因为你设置的快捷键和文本框的快捷键冲突了(比如:Ctrl+C,Ctrl+V),如果你设置个Ctrl+W就可以响应了
    所以执行的是文本框的快捷键,不执行Menu中的快捷键
    不知道能明白不
    先自己试试,不行再给你Source
      

  3.   

    其实你根本没必要这样子,假设你需要点击Delete键清除你文本里面的内容,那么按你现在的思路是把这个快捷键加在文本里面........你可以给这个文本做个右键菜单,或是你直接用你标题栏上面的菜单加一个清除的功能,然后把这个快捷键加在里面岂不是就达到了你的这个需求?
      

  4.   

    应该不是快捷键冲突问题
    文本框是我自己做的,不会存在快捷键冲突问题
    我怀疑是快捷键是在文本中按的,而Menu无法接收到快捷键。
    因为如果是在菜单栏那上面按的话,就可以运行Action,
    而在文本里按的话就无法运行
    如果你需要源码的话我给你
      

  5.   

    刚刚重新考虑了下
    你的建议只能用在Edit操作上
    无法用在保存文件之类的操作上
    麻烦重新考虑下
      

  6.   

    不如用javax.swing.ActionMap来处理键盘事件吧,这样整个程序接收的键盘事件都能处理
      

  7.   

    汗··链接没发出来http://blog.csdn.net/cwjfzu/archive/2005/11/01/520914.aspx
      

  8.   

    按Ctrl+D不好用,按Ctrl+W好用,不知道说的对不对
    PS:觉得文本和是不是自己做的无关
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;import javax.swing.ButtonGroup;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JRadioButtonMenuItem;
    import javax.swing.JTextArea;
    import javax.swing.KeyStroke;
    import javax.swing.border.BevelBorder;public class IntroJMenuExample extends JMenuBar {    /**
         * serialVersionUID
         */
        private static final long serialVersionUID = 1250624352789987081L;    private String[] filesItems = new String[]{"New", "Open", "Save", "Exit" };    private String[] editItems = new String[]{"Undo", "Cut", "Copy", "Paste" };    private char[] fileShortcuts = {'N', 'O', 'S', 'X' };    private char[] editShortcuts = {'Z', 'X', 'W', 'V' };    public IntroJMenuExample() {
            JMenu fileMenu = new JMenu("File");
            JMenu editMenu = new JMenu("Edit");
            JMenu otherMenu = new JMenu("Other");
            JMenu subMenu = new JMenu("SubMenu");
            JMenu subMenu2 = new JMenu("SubMenu2");        ActionListener printListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Menu item [" + e.getActionCommand() + "] was pressed");
                }
            };        for (int i = 0; i < this.filesItems.length; i++) {
                JMenuItem item = new JMenuItem(this.filesItems[i], this.fileShortcuts[i]);
                item.addActionListener(printListener);
                fileMenu.add(item);
            }        for (int i = 0; i < this.editItems.length; i++) {
                JMenuItem item = new JMenuItem(this.editItems[i]);
                KeyStroke keyStroke;
                if (i == 0) {                keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0);
                } else {
                    keyStroke =
                            KeyStroke.getKeyStroke(this.editShortcuts[i], Toolkit
                                .getDefaultToolkit()
                                .getMenuShortcutKeyMask(), false);
                }
                item.setAccelerator(keyStroke);
                item.addActionListener(printListener);
                editMenu.add(item);
            }        editMenu.insertSeparator(1);        JMenuItem item;
            item = new JMenuItem("Extra 2");
            subMenu2.add(item);
            item.addActionListener(printListener);
            item = new JMenuItem("Extra 1");
            item.addActionListener(printListener);
            subMenu.add(item);
            subMenu.add(subMenu2);        otherMenu.add(subMenu);
            item = new JCheckBoxMenuItem("Check me");
            item.addActionListener(printListener);
            otherMenu.add(item);
            otherMenu.addSeparator();        ButtonGroup btnGroup = new ButtonGroup();
            item = new JRadioButtonMenuItem("Radio 1");
            item.addActionListener(printListener);
            otherMenu.add(item);
            btnGroup.add(item);
            item = new JRadioButtonMenuItem("Radio 2");
            item.addActionListener(printListener);
            btnGroup.add(item);
            otherMenu.add(item);
            otherMenu.addSeparator();
            item = new JMenuItem("Potted Plant");
            item.addActionListener(printListener);
            otherMenu.add(item);        this.add(fileMenu);
            this.add(editMenu);
            this.add(otherMenu);
            this.setSelected(item);
            this.setBorder(new BevelBorder(BevelBorder.RAISED));
        }    public static void main(String[] args) {
            JFrame frame = new JFrame();
            JTextArea textArea = new JTextArea();
    frame.getContentPane().add(textArea);
    KeyListener[] keyListeners = textArea.getKeyListeners();
    for (KeyListener listener : keyListeners) {
    textArea.removeKeyListener(listener);
    }
            frame.setJMenuBar(new IntroJMenuExample());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    }
      

  9.   

    你的方法我试过的
    只能在面板上捕捉inputMap而后映射
    无法在文本区中捕捉的
      

  10.   

    放上源码,希望指教
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    public class Test{
    public static void main(String[] args) {
    TestFrame frame= new TestFrame();
    frame.setVisible(true);
    }
    }class TestFrame extends JFrame{
    JTextArea area;
    public TestFrame(){
    this.setTitle("文本区");
    /**
     * WindowListener implements
     */
    this.addWindowListener(new WindowListener(){
    public void windowActivated(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    public void windowClosed(WindowEvent arg0) {
    // TODO 自动生成方法存根
    }
    public void windowClosing(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    public void windowDeactivated(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    public void windowDeiconified(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    public void windowIconified(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    public void windowOpened(WindowEvent arg0) {
    // TODO 自动生成方法存根

    }
    });
    /**
     * Set the size of frame
     */
    Toolkit tool= Toolkit.getDefaultToolkit();
    Dimension screenSize= tool.getScreenSize();
    int width= screenSize.width;
    int height= screenSize.height;
    this.setSize(width/3+50, height/3);
    this.setLocation(width/4, height/4);
    /**
     * Add the JTextArea 
     */
    area = new JTextArea();
    this.add(area);
    area.setLineWrap(true);
    area.setFont(new Font(Font.SERIF,Font.PLAIN,15));
    JScrollPane scrollPanel = new JScrollPane(area);
    this.add(scrollPanel,BorderLayout.CENTER);
    /**
     * Menu
     */
    JMenuBar menuBar = new JMenuBar();
    this.setJMenuBar(menuBar);

    //File Menu
    JMenu fileMenu= new JMenu("File(F) ");
    fileMenu.setMnemonic('F');
    menuBar.add(fileMenu); 
    JMenuItem openMenu= new JMenuItem("Open(O)      Ctrl+O");
    openMenu.setMnemonic('O');
    fileMenu.add(openMenu);
    JMenuItem newMenu = new JMenuItem("New(N)        Ctrl+N");
    newMenu.setMnemonic('N');
    fileMenu.insert(newMenu, 0);
    JMenuItem saveMenu = new JMenuItem("Save(S)       Ctrl+S");
    saveMenu.setMnemonic('S');
    fileMenu.add(saveMenu);
    JMenuItem saveAsMenu = new JMenuItem("Save As(A)...  ");
    saveAsMenu.setMnemonic('A');
    fileMenu.add(saveAsMenu);
    fileMenu.addSeparator();
    JMenuItem exitMenu = new JMenuItem("Exit(X)  ");
    exitMenu.setMnemonic('X');
    fileMenu.add(exitMenu);

    //Edit Menu
    JMenu editMenu = new JMenu("Edit(E)  ");
    editMenu.setMnemonic('E');
    menuBar.add(editMenu);
    JMenuItem cutMenu= new JMenuItem("Cut(T)           Ctrl+X");
    cutMenu.setMnemonic('T');
    cutMenu.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));
    editMenu.add(cutMenu);
    JMenuItem copyMenu = new JMenuItem("Copy(C)        Ctrl+C");
    copyMenu.setMnemonic('C');
    editMenu.add(copyMenu);
    JMenuItem pasteMenu = new JMenuItem("Paste(P)      Ctrl+V");
    pasteMenu.setMnemonic('P');
    editMenu.add(pasteMenu);
    JMenuItem delMenu = new JMenuItem("Delete(L)      Del");
    delMenu.setMnemonic('L');
    editMenu.add(delMenu);

    //Fromat Menu
    JMenu formatMenu = new JMenu("Format(M)  ");
    formatMenu.setMnemonic('M');
    menuBar.add(formatMenu);
    final JMenuItem wrapMenu = new JMenuItem("√Wrap(W)");
    wrapMenu.setMnemonic('W');
    formatMenu.add(wrapMenu);
    wrapMenu.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setLineWrap(!area.getLineWrap());
    wrapMenu.setText(area.getLineWrap()?"√Wrap(W)":"Wrap(W)");
    }
    });
    JMenuItem fontChooseMenu = new JMenuItem("Font Choose(P)");
    fontChooseMenu.setMnemonic('P');
    formatMenu.add(fontChooseMenu);
    JMenu fontMenu = new JMenu("Font(F)");
    fontMenu.setMnemonic('F');
    formatMenu.add(fontMenu);
    ButtonGroup nameGroup = new ButtonGroup();
    JRadioButtonMenuItem nameSerif= new JRadioButtonMenuItem("Serif");
    nameSerif.setSelected(true);
    nameSerif.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(Font.SERIF,area.getFont().getStyle(),area.getFont().getSize()));
    }
    });
    nameGroup.add(nameSerif);
    fontMenu.add(nameSerif);
    JRadioButtonMenuItem nameMonospaced= new JRadioButtonMenuItem("Monospaced");
    nameMonospaced.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(Font.MONOSPACED,area.getFont().getStyle(),area.getFont().getSize()));
    }
    });
    nameGroup.add(nameMonospaced);
    fontMenu.add(nameMonospaced);
    JRadioButtonMenuItem nameDialog = new JRadioButtonMenuItem("Dialog");
    nameDialog.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(Font.DIALOG,area.getFont().getStyle(),area.getFont().getSize()));
    }
    });
    nameGroup.add(nameDialog);
    fontMenu.add(nameDialog);
    fontMenu.addSeparator();
    ButtonGroup styleGroup = new ButtonGroup();
    JRadioButtonMenuItem stylePlain = new JRadioButtonMenuItem("Plain");
    stylePlain.setSelected(true);
    stylePlain.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),Font.PLAIN,area.getFont().getSize()));
    }
    });
    styleGroup.add(stylePlain);
    fontMenu.add(stylePlain);
    JRadioButtonMenuItem styleBold = new JRadioButtonMenuItem("Bold");
    styleBold.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),Font.BOLD,area.getFont().getSize()));
    }
    });
    styleGroup.add(styleBold);
    fontMenu.add(styleBold); 
    JRadioButtonMenuItem styleItalic = new JRadioButtonMenuItem("Italic");
    styleItalic.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),Font.ITALIC,area.getFont().getSize()));
    }
    });
    styleGroup.add(styleItalic);
    fontMenu.add(styleItalic); 
    fontMenu.addSeparator();
    ButtonGroup sizeGroup = new ButtonGroup();
    JRadioButtonMenuItem size12 = new JRadioButtonMenuItem("12");
    size12.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),area.getFont().getStyle(),12));
    }
    });
    sizeGroup.add(size12);
    fontMenu.add(size12);
    JRadioButtonMenuItem size15= new JRadioButtonMenuItem("15");
    size15.setSelected(true);
    size15.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),area.getFont().getStyle(),15));
    }
    });
    sizeGroup.add(size15);
    fontMenu.add(size15);
    JRadioButtonMenuItem size18= new JRadioButtonMenuItem("18");
    size18.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),area.getFont().getStyle(),18));
    }
    });
    sizeGroup.add(size18);
    fontMenu.add(size18);
    JRadioButtonMenuItem size20 = new JRadioButtonMenuItem("20");
    size20.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    // TODO 自动生成方法存根
    area.setFont(new Font(area.getFont().getFontName(),area.getFont().getStyle(),20));
    }
    });
    sizeGroup.add(size20);
    fontMenu.add(size20);

      

  11.   

    cutMenu.setMnemonic('T');

    cutMenu.setMnemonic(keyEvent.VK_T);
    其他的快捷键同上