class myfrm extends JFrame
{
public MyPanel panel1;public myfrm()
{
   panel1 = new MyPanel(this);
}
public void beep()
{}
}class MyPanel extends JPanel 
{
 private JFrame parent;
 public MyPanel(JFrame fr)
{
parent = fr;
myActionListener ml = new myActionListener();
bt.addActionListener(ml);
}
private JButton bt;class myActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
   parent.beep();
}
}}

解决方案 »

  1.   

    MyPanel panel=new MyPanel();
    Button btn=new Button("Button");
    final MyFrame frame=new MyFrame();
    panel.add(btn);
    frame.add(panel);
    btn.addActionListener(
       new ActionListener()
       {
             public void actionPerformed(ActionEvent e)
             {
                 frame.beep();
              }
       });
      

  2.   

    class MyPanel p extends JPanel
    {
       public p(Container c){
          c.beep();
       }
    }class f extends JFrame
    {
       public beep(){...}
    }在调用的时候把f的实例作为参数传入.
    当然还有p.getParent()方法可以得到父类
      

  3.   

    恩!这个办法的确可以,非常感谢。另外,还有什么利用Listener实现的办法么?
      

  4.   

    我的意思就是把对父类方法的调用放在Button 的事件里.
    class MyPanel p extends JPanel
    {
       JFrame frame;
       JButton button=new JButton("show");
       public p(JFrame f){
          frame=f;
          add(button);
          button.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e)
             {
                    frame.beep();
             }
          });
       }
    }class f extends JFrame
    {
       public beep(){...}
    }
    不知道你想要的是不是这种写法?