图标是否已缓冲?

时间:2021-01-08 12:38:37

标签: java swing jlabel jdialog

当我单击“显示对话框”按钮时,会出现一个 JDialog,其中包含一个带有图标(图像)的 JLabel,如果文件“C:\Test\Test.png”存在,则图像显示正确。我有一个外部进程,白天更新此图像(始终使用相同的名称“Test.png”)。但我的问题是,即使我处理了 jdialog 并更新了图像(应用程序仍在运行),当我再次单击“显示对话框”时,jdialog 与旧图像一起显示(看起来旧图像在缓冲区中)在某处)。即使我关闭 jdialog,删除文件 e 再次打开它显示图像。

有什么办法可以预防吗?

我需要的是,当我打开 jdialog 时,它会显示更新后的图像。

import java.awt.Dimension;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class ShowImage implements Runnable {

    @Override
    public void run() {
        createGUI();
    }

    public void createGUI() {
        JButton jButton = new JButton("Show dialog");
        jButton.addActionListener((e) -> new ShowImageWindow());

        JFrame jFrame = new JFrame();
        jFrame.add(jButton);
        jFrame.pack();
        jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ShowImage());
    }
}

class ShowImageWindow extends JDialog {
 
    private JLabel imagemJLabel;

    public ShowImageWindow() {
        initComponents();
    }
    
    public void initComponents() {
        Icon preview = new ImageIcon("C:\\Test\\Test.png");
        System.out.println(preview.toString());
        imagemJLabel = new JLabel();
        imagemJLabel.setHorizontalAlignment(SwingConstants.CENTER);
        imagemJLabel.setIcon(preview);
        
        JPanel contentPane = new JPanel();
        contentPane.add(this.imagemJLabel);
        
        setSize(new Dimension(500, 500));
        setModal(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setContentPane(contentPane);
        setVisible(true);
    }
}

谢谢。

0 个答案:

没有答案
相关问题