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 );
}

}

ButtonPanel クラス

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");
    }
}

}

GrowPanel クラス

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 のメソッドを取得する方法がわかりません。そのアイデアは可能ですか?これまでのところ、セッター/ゲッター、シングルトン パターンなど、役立つトピックをいくつか紹介してきましたが、これまでのところ、そのアイデアはとらえどころのないものでした。

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 に答える