(类间通讯问题) 如何做到将 A窗体中的信息, 通过类C在类之间实现通讯, 传送到 B窗体中去一个工程由三个类组成, 我的代码哪里错了, 老是报异常
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Frame extends JFrame {
    private Lpanel l = null;
    private Rpanel n = null;    public Frame()  {
        super();        Lpanel  a = new Lpanel();
        Rpanel  b= new Rpanel();
        this.getContentPane().add(a, BorderLayout.WEST);
        this.getContentPane().add(b, BorderLayout.CENTER);
    }    public void DoSth(String s)  {
           n.SetLabel(s);
    }    public static void main(String[] args)   {
        Frame fa = new Frame();        fa.setSize(300, 200);
        fa.setVisible(true);
    }
}
import javax.swing.*;
import java.awt.event.*;class Lpanel  extends JPanel{
    private Frame lpf = null;
    private JButton b ;    public  Lpanel() {
       super();        b = new JButton("AAA");
        b.addActionListener( new ActionListener () {
            public void actionPerformed(ActionEvent e) {
    lpf.DoSth( Lpanel.this.b.getText() );
                // 我希望当JButton被按下时, 通过 Frame 类中的方法将JButton上的标题传送给Rpanel 中 Label
}
        });        this.add(b);
    }
}
 import javax.swing.*;
import java.awt.event.*;class Rpanel  extends JPanel {
     private Frame npf = null;
    private JLabel  label = null;    public void SetLabel(String s)  {
             label.setText(s);
    }    public Rpanel()  {
       super();        this.label = new JLabel("123456");
       this.add(label);
    }
}

解决方案 »

  1.   

    //Frame.java
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Frame extends JFrame
    {
    private Lpanel l = null; private Rpanel n = null; public Frame()
    {
    super(); l = new Lpanel(this);
    n = new Rpanel(this);
    this.getContentPane().add(l, BorderLayout.WEST);
    this.getContentPane().add(n, BorderLayout.CENTER);
    } public void DoSth(String s)
    {
    n.SetLabel(s);
    } public static void main(String[] args)
    {
    Frame fa = new Frame(); fa.setSize(300, 200);
    fa.setVisible(true);
    }
    }
    //Lpanel.java
    import javax.swing.*;
    import java.awt.event.*;class Lpanel extends JPanel
    {
    private Frame lpf = null; private JButton b; public Lpanel(Frame f)
    {
    super();
    lpf = f;

    b = new JButton("AAA");
    b.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    lpf.DoSth(Lpanel.this.b.getText());
    // 我希望当JButton被按下时, 通过 Frame 类中的方法将JButton上的标题传送给Rpanel 中 Label
    }
    }); this.add(b);
    }
    }
    //Rpanel.java
    import javax.swing.*;
    import java.awt.event.*;class Rpanel extends JPanel
    {
    private Frame npf = null; private JLabel label = null; public void SetLabel(String s)
    {
    label.setText(s);
    } public Rpanel(Frame f)
    {
    super();
    this.npf = f; this.label = new JLabel("123456");
    this.add(label);
    }
    }