在Java中动态添加ImageIcon

在Java中动态添加ImageIcon,java,swing,user-interface,netbeans,Java,Swing,User Interface,Netbeans,好吧,我是GUI方面的新手。我正在用一个简单的程序进行实验,在这个程序中,你选择一种颜色、宽度、高度,它将生成一个具有指定值的png文件。我的问题是在My generate函数执行后将图像图标添加到标签。文件已创建,但imagePanel中未显示imageIcon。这只是我正在创建的测试 这就是我遇到的问题: private void generateActionPerformed(java.awt.event.ActionEvent evt) {

好吧,我是GUI方面的新手。我正在用一个简单的程序进行实验,在这个程序中,你选择一种颜色、宽度、高度,它将生成一个具有指定值的png文件。我的问题是在My generate函数执行后将图像图标添加到标签。文件已创建,但imagePanel中未显示imageIcon。这只是我正在创建的测试

这就是我遇到的问题:

    private void generateActionPerformed(java.awt.event.ActionEvent evt) {                                    
    int Width=getWidthInput();
    int Height= getHeightInput();
    BufferedImage image= new BufferedImage(Width,Height, BufferedImage.TYPE_INT_ARGB);
    File directory= null;
    BufferedImage generatedPic;
    //drawing portions of image
    for(int i = 0; i < Height; i++){
            for(int j=0; j<Width; j++){
                    int a=255;
                    int r=getRed();
                    int g=getGreen();
                    int b=getBlue();
                    int p= (a<<24)|(r<<16)|(g<<8)|b;
                    image.setRGB(j,i,p);
            }
    }
    try{
            directory= new File("testImg.png");
            ImageIO.write(image,"png",directory);
            System.out.println("Image Has Been Written");
            ImageIcon ii= new ImageIcon(getClass().getResource("testImg.png"));
            imageLabel.setIcon(ii);
            revalidate();
            repaint();
    }
    catch(IOException e){
            System.out.println("Error: "+ e);
    }
    directory.deleteOnExit();   
}
private void generateActionPerformed(java.awt.event.ActionEvent evt){
int Width=getWidthInput();
int Height=getHeightInput();
BuffereImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_ARGB);
文件目录=null;
BuffereImage生成的PIC;
//绘制图像的各个部分
对于(int i=0;i对于(int j=0;j,由于代码已经创建了一个
文件
,因此使用该文件作为
图像图标的
URL
的基础非常有意义

import java.awt.image.BufferedImage;
import java.io.*;
import java.net.MalformedURLException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class SavedImageDisplayer {

    public static void main(String[] args) throws IOException {
        BufferedImage img = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
        final File file = new File("testImg.png");
        ImageIO.write(img, "png", file);
        Runnable r = new Runnable() {
            @Override
            public void run() {
                ImageIcon imageIcon;
                try {
                    // use the File as basis for the URL!
                    imageIcon = new ImageIcon(file.toURI().toURL());
                    JOptionPane.showMessageDialog(null, imageIcon);
                } catch (MalformedURLException ex) {
                    ex.printStackTrace();
                }
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

在图像的整个X/Y像素上循环的一种替代方法是将图形绘制到图形对象上,如考虑两个文件路径:<代码>“证明”。PNG“< /COD> vs.代码> GETCARCH”(.GETREST)(“GISG.PNG”)
。它们是一样的吗?@gpasch你不必那么粗鲁,他只是想学习它的工作原理,但是Swing不是线程安全的,
SwingUtilities.invokeLater(新的Runnable(){…
将你的程序放在事件调度线程(EDT)中,请参阅@JoseOrtiz,getClass().getResource()使用类加载器-文件必须在类路径上。我建议检查此调用返回的URL谢谢你@Andrew Thompson!非常干净。我们在上面的评论中讨论了此问题!感谢你的回复,非常感谢!“我们在上面的评论中讨论了此问题!”哦,糟糕!我还没有喝完当天的第一杯咖啡&我决定不必费心浏览上面的评论,因为创建一个示例非常简单:PNo担心!你们太棒了!谢谢!
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.MalformedURLException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class SavedImageDisplayer {

    public static void main(String[] args) throws IOException {
        BufferedImage img = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
        final File file = new File("testImg.png");
        ImageIO.write(img, "png", file);
        Runnable r = new Runnable() {
            @Override
            public void run() {
                ImageIcon imageIcon;
                try {
                    // use the File as basis for the URL!
                    imageIcon = new ImageIcon(file.toURI().toURL());
                    JOptionPane.showMessageDialog(null, imageIcon);
                } catch (MalformedURLException ex) {
                    ex.printStackTrace();
                }
            }
        };
        SwingUtilities.invokeLater(r);
    }
}