0

JPanelが開いていた時間をミリ秒単位で追跡しようとしていますが、それを行う簡単な方法があるかどうかはわかりませんが、現在の時間をwindowOpened()でMSに記録してから減算すると思いましたパネルを閉じた時から?残念ながら、この変数を渡す方法がわかりません。

これが私のコードです:

public void windowOpened(WindowEvent arg0) {
  Calendar OlCDateTime = Calendar.getInstance();
  long openedTime = OlCDateTime.getTimeInMillis();
  System.out.println(openedTime);
}

メソッドの外ではアクセスできないローカル変数を使用していると思いますが、それを修正する方法がわかりません。それを行う方法や、私がやろうとしていることを行うためのより良い方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

1

これを実現するには、クラスでインスタンス変数を使用できる必要があります。ウィンドウがいつ開かれたか、いつ閉じられたかを追跡するだけです。次に、必要な情報にアクセスする方法を提供します。次のようになります (簡易版)。

public class MyPanel extends JPanel {
    // ...

    private long _openTime = 0;
    private long _closeTime = 0;

    public long getOpenTime() {
        long closed = _closeTime;

        // if the window is still open, use current time...
        if (closed == 0) {
            closed = System.currentTimeMillis();
        }

        return (closed - _openTime);
    }

    public void onWindowOpened(WindowEvent evt) {
        _openTime = System.currentTimeMillis();
    }

    public void onWindowClosed(WindowEvent evt) {
        _closeTime = System.currentTimeMillis();
        System.out.println(getOpenedTime());  // DEBUG
    }
}

これにより、オブジェクトが有効である限り、「開かれた時間」にアクセスできます。これには、このオブジェクトのイベントをサブスクライブした呼び出し元が含まれます。

于 2012-10-28T04:08:59.480 に答える