应用程序有个Main,main中new一个MyFrame(继承JFrame),现在有个MyPanel类(JPanel),他会被MyFrame主窗口类中调用,即在MyFrame类中点击,会弹出MyPanel类,MyPanel类中响应鼠标事件,需要把鼠标坐标值反应到MyFrame类的状态栏,status为MyFrame的私有成员,但是,MyPanel类和MyFrame类存放在不同的两个package中,因此MyPanel类无法获得MyFrame类的status对象(JLabel)
在C++中,常用的做法是,把MyFrame类作为App的成员,然后通过GetApp()->GetMainFrame()的方式,从而获得status成员不知道java里该怎么办?

解决方案 »

  1.   

    在MyFrame类中写一个public 方法,在MyPanel类中调用这一方法,从而对status成员进行相应操作。
      

  2.   

    我觉得对可以把MyFrame类作为参数在MyPanel类对象弹出时传给MyPanel类,然后,直接通过传入的对象对主窗口的status进行操作。
      

  3.   

    MyFrame中的public方法,我认为不行,因为status不是static成员,因此只属于MyFrame类的某个实例,还是要解决“获得MyFrame类的实例的问题”,尤其是当MyFrame实例不只一个的时候
      

  4.   


    怎么把MyFrame类作为参数传给MyPanel?
      

  5.   

    楼主给你一个小例子:import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;/**
     * 演示 MyPanel 如何操作 MyFrame
     */
    public class AccessFrameFromPanel {    public static void main(String[] args) {
            MyFrame frame = new MyFrame();
            frame.setSize(300, 150);
            frame.setVisible(true);
        }
    }class MyFrame extends JFrame {    MyFrame() throws HeadlessException {
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            initControls();
        }    private void initControls() {
            this.add(new MyPanel(this), BorderLayout.CENTER);
        }
    }class MyPanel extends JPanel {    MyPanel(final MyFrame frame) {
            this.addMouseListener(new MouseAdapter() {            @Override
                public void mouseClicked(MouseEvent e) {
                    frame.setTitle(e.getX() + ": " + e.getY());
                }
            });
        }
    }