gpt4 book ai didi

java - 在java中加载图像时遇到问题,有人能看看出了什么问题吗?

转载 作者:行者123 更新时间:2023-12-02 04:52:42 27 4
gpt4 key购买 nike

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class MainWindow extends JFrame{

public static void main(String[] args) {

JFrame mainWindow = new JFrame("Siege Arena");
mainWindow.setResizable(false);
mainWindow.setVisible(true);
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setSize(500, 500);
loadpics();

}

Image bg;

public void loadpics(){
bg = new ImageIcon("C:\\test\\Background.png").getImage();
repaint();

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

}



}

我想做的就是创建一个 JFrame 并在其上加载一个简单的图像,我到底该怎么做。我在这里尝试过,但失败了。有人可以帮助我吗?

最佳答案

Can someone see what is wrong?

  • JFrame 扩展,您不会添加任何新功能,并且会将自己锁定在该组件的单一使用中
  • 覆盖顶级容器的paint,例如JFrame,打破绘制链非常容易(就像您所做的那样),这会带来无穷无尽的问题
  • 不调用 super.paint 并破坏绘制链
  • 未将 ImageObserver 传递给 ImageIcon
  • 当您尝试加载图像时引用了错误的 MainWindow 实例。

如果我“猜测”正确,您正在尝试将背景图像绘制到窗口中。如果是这样,那么您尝试的方法绝对不是解决问题的方法。

相反...

  • 从扩展自 JPanel 的自定义组件开始
  • 使用paintComponent方法绘制图像
  • 考虑使用 ImageIO 而不是 ImageIcon。如果图像无法加载,ImageIO将会抛出异常。

例如...

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

public static void main(String[] args) {
new Test();
}

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new BackgroundPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class BackgroundPane extends JPanel {

private BufferedImage bg;

public BackgroundPane() {
try {
bg = ImageIO.read(new File("C:\\test\\Background.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}

@Override
public Dimension getPreferredSize() {
return bg == null ? new Dimension(200, 200) : new Dimension(bg.getWidth(), bg.getHeight());
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (bg == null) {
Graphics2D g2d = (Graphics2D) g.create();
int x = (getWidth() - bg.getWidth()) / 2;
int y = (getHeight() - bg.getHeight()) / 2;
g2d.drawImage(bg, x, y, this);
g2d.dispose();
}
}

}

}

看一下:

了解更多详情...

关于java - 在java中加载图像时遇到问题,有人能看看出了什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068870/

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