《CoreJava2》中的一个事件触发的例子。我在其中添加了两个快捷键。其中“ctrl+N”可用,而"ctrl+C"不可用。麻烦帮我看一下为什么? 如何实现ctrl+C的功能。多谢……
========================
代码如下:MulticastTest.java
package event;
import javax.swing.*;
import java.awt.*;
import java.awt.even;public class MulticastTest {
  public static void main(String[] args){
    MulticastFrame frame = new MulticastFrame();
    frame.setDefaultCloseOperation(3);
    frame.show();
  }
}class MulticastFrame extends JFrame {
  public MulticastFrame() {
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension d = kit.getScreenSize();
    final int X = d.width;
    final int Y = d.height;
    setTitle("MulticastFrame");
    setBounds(X/4,Y/4,X/2,Y/2);
    Container contentPane = getContentPane();
    contentPane.add(new MulticastPanel());
  }
}class MulticastPanel extends JPanel{
  public MulticastPanel(){
    setBackground(Color.ORANGE);
    JButton addFrameButton = new JButton("AddFrame");
    final JButton closeAllButton = new JButton("CloseAll");
    add(addFrameButton);
    add(closeAllButton);
    Action addListener = new AbstractAction() {
      public void actionPerformed(ActionEvent e) {
        final BlankFrame blankframe = new BlankFrame(closeAllButton);       
        blankframe.show();
        requestFocus();
        //创建完BlankFrame之后,将焦点转移回MulticastFrame
      }
    };    addFrameButton.addActionListener(addListener);    //定义快捷键
    InputMap imap = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    imap.put(KeyStroke.getKeyStroke("ctrl N"), "new Frame");
    imap.put(KeyStroke.getKeyStroke("ctrl C"), "close Frame");    ActionMap amap = getActionMap();
    amap.put("new Frame", addListener);
    amap.put("close Frame", blankframe.closeListener);
  }  private Action listener;
}//MulticastPanel//new Frame
class BlankFrame extends JFrame{
  public BlankFrame(final JButton closeButton){   //final
    counter++;
    setTitle("BlankFrame"+counter);
    setSize(DEF_WIDTH,DEF_HEIGHT);
    setLocation(SPACING*counter,SPACING*counter);    button = closeButton;    getContentPane().add(new BlankPanel());  }  public static Action getListener() {
    return(closeListener);
  }  private class BlankPanel extends JPanel{
      public BlankPanel(){
        setBackground(Color.ORANGE.darker());        closeListener = new AbstractAction() {
          public void actionPerformed(ActionEvent e) {
            button.removeActionListener(this);
            dispose();
            counter = 0;
          }
        };       button.addActionListener(closeListener);
      }
  }  private JButton button;
  private static Action closeListener;
  private static int counter = 0;
  private final int DEF_WIDTH = 200;
  private final int DEF_HEIGHT = 150;
  private final int SPACING = 20;
}//键盘操作ctrl+C如何实现?   closeListener的添加问题
==========================================================
我觉得问题出在closeListener上。因为closeListener不是在MulticastFrame中定义的,要怎么在MulticastFrame中使它和ctrl+C关联。