在Java中动态添加ImageIcon
好吧,我是GUI方面的新手。我正在用一个简单的程序进行实验,在这个程序中,你选择一种颜色、宽度、高度,它将生成一个具有指定值的png文件。我的问题是在My generate函数执行后将图像图标添加到标签。文件已创建,但imagePanel中未显示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) {
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);
}
}