晕,主要是方法的问题
setMnemonic()方法是为按钮设置快捷键,这个方法就是要用ALT加上你设置的虚拟键来一起使用。
这个方法不可能设置单键的。
VK_I就是"I"键的虚拟键代码。搂主应该补习一下相关的知识啦!

解决方案 »

  1.   

    哦 好的 谢谢指点 我新学JAVA确实水平比较差
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Test
    {  
       public static void main(String[] args)
       {  
          TestFrame frame = new TestFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    }class TestFrame extends JFrame
    {
       public TestFrame()
       {
          setSize(300,200);
          
          TestPane panel = new TestPane();
          add(panel);
       }
    }class TestPane extends JPanel
    {  
       public TestPane()
       {  
          //创建自己定义的动作类的对象
          Action yellowAction = new ColorAction("Yellow", Color.YELLOW);
          Action blueAction = new ColorAction("Blue", Color.BLUE);
          Action redAction = new ColorAction("Red", Color.RED);
          
          //构造JButton,很方便,因为JButton有专门的构造器接受动作对象
          add(new JButton(yellowAction)); 
          add(new JButton(blueAction));
          add(new JButton(redAction));
      
      //定位顶层组件,并得到WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射
          InputMap imap = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
          
          //为需要的击键创建KeyStroke对象,并用字符串描述动作
          imap.put(KeyStroke.getKeyStroke("typed y"), "panel.yellow");
          //还可以这样写,如果是ALT组合件0就改成InputEvent.ALT_MASK
          //imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, 0), "panel.yellow");
          imap.put(KeyStroke.getKeyStroke("typed b"), "panel.blue");
          imap.put(KeyStroke.getKeyStroke("typed r"), "panel.red");
      
      //得到顶层组件的动作映射并把动作键和动作对象添加进该映射
          ActionMap amap = getActionMap();
          amap.put("panel.yellow", yellowAction);
          amap.put("panel.blue", blueAction);
          amap.put("panel.red", redAction);
       }
       
       //建立一个类扩展AbstractAction
       public class ColorAction extends AbstractAction
       {  
          public ColorAction(String name, Color c)
          {  
             putValue(Action.NAME, name);
             putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());
             putValue("color", c);
          }      public void actionPerformed(ActionEvent event)
          {  
             Color c = (Color) getValue("color");
             setBackground(c);
          }
       }
    }
      

  3.   

    还纠正一下,setMnemonic()的组合键应该通常是ALT(API里面这么说的),不过我找了半天还是没找到怎么修改,好像只能在KeyStroke里面修改吧。望高手指点。
    所以搂主可以用我上面的建立动作对象的方法。
      

  4.   

    设置字符就可以了啊:
      调用 setMnemonic(char mnemonic) 方法。
      jMenuFile.setMnemonic('f'); jMenuHelp.setMnemonic('h');jMenuHelpAbout.setMnemonic('a');
      

  5.   

    他是要在JButton上实现啊,又不是在JMenuItem上实现,怎么设置字符啊?