ImageIcon,只显示一半图像

时间:2016-04-30 17:16:03

标签: java swing

我不知道这里发生了什么,因为我在这里画了很多但这让我很生气。 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);
    }

}

2 个答案:

答案 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);
}