0

关于如何从另一个类上声明的已声明实例中获取方法的想法是什么?

成长课堂

public class Grow {

public static void main( String [] args ) {
    JFrame frame = new JFrame();
    final GrowPanel growPanel = new GrowPanel();
    ButtonPanel btnPanel = new ButtonPanel();
    frame.add( growPanel );
    frame.add( btnPanel, BorderLayout.SOUTH);

    frame.setSize( 400, 300 );
    frame.setVisible( true );
}

}

按钮面板类

public class ButtonPanel extends JPanel implements ActionListener{

JButton btn;

public ButtonPanel() {
    btn = new JButton("Pause");
    add(btn);
    btn.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
     if( e.getActionCommand().equals("Pause")){
        System.out.println("RESUME");
        //growPanel.pause();
        btn.setText("Resume");
    } else {
        System.out.println("PAUSE");
       // growPanel.start();
        btn.setText("Pause");
    }
}

}

生长面板类

class GrowPanel extends JComponent {
private int x;
private int y;
private Timer timer;
ButtonPanel b;

public GrowPanel() {
    x = 10;
    y = 10;
    startPaiting();
}

public void startPaiting() {
    timer = new Timer();
    timer.schedule( new TimerTask(){
        public void run(){
                changeState();
                repaint();      
        }
    },0,  100 );
}

public void pause(){
    timer.cancel();
    startPaiting();
}

 public void start(){
    timer.cancel();
    x = 10;
    y = 10;
    startPaiting();
}

public void paintComponent( Graphics g ){
    g.fillOval( x, y, 10, 10 );
}
private void changeState(){
    x+=10;
    if( x >= 400 ) {
        y+=10;
        x = 0;
    }
    if( y >= 300 ){
        y = 10;
    }
}

}

我已经在 Grow 中声明了一个新的 GrowPanel 实例。我只是不知道如何在不在 ButtonPanel 中声明 GrowPanel 的新实例的情况下从 ButtonPanel 获取 GrowPanel 的方法。这个想法甚至可能吗?到目前为止,我已经获得了一些可能会有所帮助的主题:Setters / getters、Singleton Pattern...但到目前为止,这个想法一直难以捉摸。

4

1 回答 1

1

您不想在按钮面板中使用 GrowPanel 的新实例。您想使用与主框架使用的实例相同的实例。因此,只需将其传递给按钮面板:

ButtonPanel btnPanel = new ButtonPanel(growPanel);

...

public class ButtonPanel extends JPanel implements ActionListener{

    private JButton btn;
    private GrowPanel growPanel;

    public ButtonPanel(GrowPanel growPanel) {
        this.growPanel = growPanel;
    }
    ...
}
于 2013-10-05T08:48:37.767 回答