我正在尝试跟踪我的JPanel打开的时间长度(以毫秒为单位),我不知道是否有更简单的方法,但我想我会在windowOpened()上记录MS中的当前时间,并且然后从面板关闭时减去它?不幸的是,我不知道如何传递这个变量。
这是我的代码:
public void windowOpened(WindowEvent arg0) {
Calendar OlCDateTime = Calendar.getInstance();
long openedTime = OlCDateTime.getTimeInMillis();
System.out.println(openedTime);
}
我猜我在使用方法之外无法访问的局部变量,但我不知道如何解决这个问题。任何有关如何做到这一点的建议或更好的方式来做我想做的事情都将不胜感激。
答案 0 :(得分: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
}
}
只要对象保持有效,就可以访问“打开时间”。这将包括已订阅此对象上的事件的任何调用者。