0

2 つのクラス (グラフィック クラスとコントローラー クラス) を持つアプリケーションを実装したいと考えています。Mi の目的は、コントローラー クラスで発生した変更を、発生した正確なタイミングでグラフィック クラスに反映することです。オブザーバーパターンを使って行う必要があるのですが、取得方法がわかりません...

ふりをした作業は次のとおりです。 - グラフィック クラスでは、3 つの JPanel があり、それぞれの Panle に 2 秒間隔で色を付けます。

今では次のコードがあります。

----------------------Observableクラス-------------------------- ------------------

public class ImagenControl extends Observable{
private String panel1,panel2,panel3;
private int counter;
private Timer colorTimer;
private ActionListener colorListener=new ActionListener() {

    public void actionPerformed(ActionEvent ae) {
        if (counter==0){
            panel1="yellow";
            setChanged();
        }
        else if (counter==1){
            panel2="blue";
            setChanged();
        }
        else if (counter==2){
            panel3="green";
            setChanged();
        }
        if (counter==2)
            colorTimer.stop();
        else counter++;
    }
};
public void giveColor(){
    counter=0;
    colorTimer=new Timer(2000,colorListener);
    colorTimer.start();
}

---------------------------オブザーバークラス--------------------- -------------------

public class Imagen extends javax.swing.JFrame implements Observer{


public Imagen() {
    initComponents();
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    ImagenControl ctr=new ImagenControl();
    ctr.giveColor();
}                                     

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new Imagen().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
// End of variables declaration                   

@Override
public void update(Observable o, Object o1) {

}

どうやってそれをしますか??

前もって感謝します!!

4

1 に答える 1

3

オブザーバーを観察可能なオブジェクトにリンクしたいと思うでしょう。これを行うには、メイン パッケージ (Observer と Observable オブジェクトの両方を作成する場所) に次のようなコードを記述します。

ImageController ic = new ImageController()
Imagen obs = new Imagen()

ic.addObserver(obs)

Observer の Update メソッドで、Observable が Observer であることを通知したときに何をしたいのかを実装します。

最後に、Observable のメソッドを使用してsetChanged()、Observable で何かが変更されたことを示すことができます。次回notifyObservers()Observable によって呼び出されると、登録されているすべての Observer に変更があったことが通知されます。

setChanged()以前に呼び出されなかった場合、オブザーバーには通知されないことに注意してくださいnotifyObservers()(通知するものが何もないため)

于 2012-07-12T18:30:17.927 に答える