0

任意のイベント メソッド (つまり、イベントで呼び出されるメソッド) で、古い情報を保持するクラスの静的変数を作成する以外の方法で、以前の呼び出しからの情報を保持するにはどうすればよいでしょうか?

例:

Class X {
   static boolean ex = false;
   static int calledTimes;
   void OnClickEvent() {
    if(calledTimes<=5)
     {
    calledTimes++; 
     ex = true;
     }
    else
    ex = false;
    }
}

この静的フラグ以外の情報を保持する方法はありますか? 私の場合と同様に、呼び出しごとに保持する多くの情報があり、あまり多くのクラス変数は必要ありません。

何か案は ?

詳細情報 : テキスト ファイルの各行をトラバースしながらメソッドを呼び出す場合があります。 GUI イベントだけでなく、一般的なソリューションが必要です

4

3 に答える 3

3

onClickEvent()特定の呼び出し (例: )をリッスンする (Event)Listener クラス インスタンスがある場合、インスタンス プロパティで十分であり、静的プロパティは必要ありません。

リスナー呼び出しは同じオブジェクト インスタンスに対して行われるため、インスタンス プロパティも保持されます。

Class X {
private boolean ex = false;
private int calledTimes;

public void onClickEvent() {
    if(calledTimes<=5) {   
        calledTimes++; 
        ex = true;
    }
}
}
于 2013-03-03T18:36:04.807 に答える
3

クラス変数の代わりにインスタンス変数を使用し、インスタンスを使用してそれらを操作するのはどうですか。このようにして、インスタンスはインスタンス変数の形式で状態を保持できます。

このクラス定義をきれいに保ちたい場合は、別のオブジェクトをインスタンス変数として維持して、状態を保持し、アクセサーを使用して個々の変数にアクセスできます。

この実装例を見てください。

public class X {

    private State state;

    // constructor to instantiate state

    void OnClickEvent() {
        if (state.getCalledTimes() <= 5) {
            state.incrementCalledTimes();
            state.setEx(true);
        } else
            state.setEx(false);
    }

}

Stateオブジェクト情報を保持するクラス:

public class State {

    private boolean ex;
    private int calledTimes;

    public void setEx(boolean ex) {
        this.ex = ex;
    }

    public int getCalledTimes() {
        return calledTimes;
    }

    public void incrementCalledTimes() {
        calledTimes++;
    }

}
于 2013-03-03T18:37:07.227 に答える
0

イベントリスナーを別のクラスに分離することで、そのクラスでフィールドを指定できます。たとえば、MouseListener インターフェイスを使用すると、次のようになります。

public class Listener implements MouseListener {

// Created a class that implements the MouseListener Interface.
// Because this is my own class I can specify some instance variables.

private boolean hasBeenClicked;

public Listener()
{
    this.hasBeenClicked = false;
}

@Override
public void mouseClicked(MouseEvent arg0) {
    if(hasBeenClicked)
    {
        System.out.println("I've already been clicked!");
                    // A Click has already occurred.
    }
    else
    {
        hasBeenClicked = true;
                    // A click has not occurred, so setting the value to true.
    }

}
于 2013-03-03T18:37:11.973 に答える