我不知道这里发生了什么,因为我在这里画了很多但这让我很生气。 m_background图像只显示了一半。当我调整大小时,看起来它们是一些组件,所以当我把窗口的底部放到较少的图像显示时,当我把它拉下来时显示更多。
此图片仅为600x600,但仅显示约250像素。 我试图删除窗格上的所有内容,但没有做任何事情。
package game;
import java.awt.Graphics;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LudoGameController extends JPanel {
private JFrame m_ludoFrame;
private int m_humanValue;
private int m_computerValue;
private JPanel m_boardPanel;
private ImageIcon m_background = new ImageIcon("images/background.png");
public LudoGameController(JFrame m_ludoFrame, int m_humanValue, int m_computerValue) throws IOException {
this.m_ludoFrame = m_ludoFrame;
this.m_humanValue = m_humanValue;
this.m_computerValue = m_computerValue;
m_ludoFrame.add(this);
m_ludoFrame.setSize(1000, 700);
m_ludoFrame.setVisible(true);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(m_background.getImage(), 0, 0, null);
}
}
答案 0 :(得分:1)
由于您只使用图像,因此最好不要使用ImageIcon
。而是使用如下所示的ImageIO
类来加载文件中的图像:
首先将类变量background
声明为类型Image
,然后将其初始化为null
。
然后在构造函数中添加以下代码以从文件中获取图像
File file = new File("images/background.png");
try {
background = ImageIO.read(file).getScaledInstance(1000, 700, Image.SCALE_FAST);
} catch (IOException ex) {
System.err.println(ex);
}
现在使用paintComponent
方法替换
g.drawImage(m_background.getImage(), 0, 0, null);
与
g.drawImage(background, 0, 0, null);
我希望这会对你有所帮助。
答案 1 :(得分:0)
可以尝试使用带有图标的JLabel并查看其行为是否有所不同。以下是我在类似于您的情况下多次成功使用的代码片段。
//bringing in the image
File file = new File("images/background.png");
try {
BufferedImage logo = ImageIO.read(file);
JLabel logoLabel = new JLabel(new ImageIcon(logo));
logoPanel.add(logoLabel);
} catch (IOException ex) {
System.err.println(ex);
}