gpt4 book ai didi

java - 图像未加载到 JFrame 内的 JPanel 中

转载 作者:行者123 更新时间:2023-12-01 18:47:05 26 4
gpt4 key购买 nike

我有一个 JFrame,它有 4 个不同的面板。下图中右侧的黑框是图像面板。我正在尝试编写一个类,该类允许我将图像加载到程序中任何其他类中的任何面板中。

http://sdrv.ms/14TEq2T

LoadImage.java

package sf;

import java.awt.*;
import java.awt.image.*;
import javax.swing.ImageIcon;

public class LoadImage extends Component {

BufferedImage img;

public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}

public LoadImage(String filename) {
try {
System.out.println(filename);
img = new ImgUtils().scaleImage(380, 360, filename);
} catch (Exception e) {
System.out.println("File not found");
}

}

class ImgUtils {

public BufferedImage scaleImage(int WIDTH, int HEIGHT, String filename) {
BufferedImage bi = null;

try {
ImageIcon ii = new ImageIcon(filename);
bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(ii.getImage(), 0, 0, WIDTH, HEIGHT, null);
} catch (Exception e) {
e.printStackTrace();
return null;
}

return bi;
}
}
}

我用来加载其他类中的图像的代码。

private void getProductImage() {

try {
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
String newPath = decodedPath.replace("build/classes/", "src/productImages/");

productImagePanel.add(new LoadImage(newPath + imageCode + ".jpg"));
revalidate();
pack();


} catch (Exception e) {
e.printStackTrace();
}
}

“imageCode”是窗口可见后从数据库检索的代码,并且我已多次检查图像路径。

LoadImage.java 可以自行工作,如果添加了“主要可运行”方法,则加载图像,但是我似乎无法在我想要的面板中显示图像。请就如何解决我的问题提出建议,我们将不胜感激!

最佳答案

您的问题很可能是您正在尝试将图像作为 JPanel 的组件加载。问题包括:

  • 组件的首选大小很可能是 [0, 0],因此它可能会尽力显示图像,但由于尺寸太小而无法执行此操作。
  • 可能已经添加了其他组件到 JPanel
  • JPanel 的布局可能不太适合新添加的组件。
  • 如果没有明确的需要,您不应将重量级(组件)与重量级(大多数其他非顶级 Window Swing 组件)混合在一起。

我建议:

  • 将 JLabel 添加到图像中,在创建 JPanel 时仅显示一次 JPanel。
  • 为您的productImagePanel提供一个接受图像或ImageIcon的方法,然后从图像创建ImageIcon或使用提供的ImageIcon来设置JLabel的图标。
  • 确保 JPanel 使用的布局允许 JLabel 完全显示自身。布局管理器教程可以帮助解决这个问题。
  • 显示 JPanel 的该图像或所有图像的目的都是显示图像而不是其他内容,将其删除并单独使用 JLabel,然后将图标直接添加到其中。

顺便说一句:您应该处置创建的任何 Graphics 和 Graphics2D 对象(但不是 JVM 提供给您的任何对象)。这意味着当您在 ImageUtilities 中使用 g2d 完成绘图后,将其丢弃。

关于java - 图像未加载到 JFrame 内的 JPanel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com