小编Mah*_*ary的帖子

使用属性更改侦听器来更新 swing 组件

我是第一次使用属性更改侦听器,因此我不太熟悉它在多个类之间的使用方式。
我正在用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)

java swing swingworker propertychangelistener

2
推荐指数
1
解决办法
5874
查看次数

标签 统计

java ×1

propertychangelistener ×1

swing ×1

swingworker ×1