我是第一次使用属性更改侦听器,因此我不太熟悉它在多个类之间的使用方式。
我正在用java编写一个下载管理器,在Download类中,有诸如downloadSize和sizeOfFile等字段。还有类DownloadPanel,它是GUI,是一个jpanel,包含一个JProgressbar和几个JLabel来显示文件数量,其中下载的文件或文件的大小(使用“下载”字段)。
Download 类扩展了 SwingWorker 并使用 HttpURLConnection 从特定 URL 下载给定文件。
在下载文件以更新其下载面板时,我实现了属性更改侦听器。问题是 JProgressbar 正在正确更新,但显示 downloadSize 和 sizeOfFile 的 JLabel 不会通过下载文件而改变。
请注意,类中不相关的部分和 getter/setter 被省略,仅包含与问题相关的部分。
属性更改监听器的实现:
public class DownloadPanelPropertyListener implements PropertyChangeListener {
Download download;
public DownloadPanelPropertyListener(Download download) {
this.download = download;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName()))
download.getDownloadPanel().getJpb().setValue((Integer) evt.getNewValue());
else if ("downloadPanel".equals(evt.getPropertyName())) {
DownloadPanel temp = (DownloadPanel) evt.getNewValue();
int ds = temp.download.getDownloadedSize();
int sof = temp.download.getSizeOfFile();
download.getDownloadPanel().setDownloadedSizeLabel(ds, sof);
}
}
Run Code Online (Sandbox Code Playgroud)
DownloadPanel类的代码:
public class DownloadPanel extends JPanel {
Download download;
JProgressBar …Run Code Online (Sandbox Code Playgroud)