无法显示ImageIcon

时间:2015-05-19 14:43:07

标签: java swing graphics jframe imageicon

我已经看过很多其他问题,其中人们遇到的问题与我在这里遇到的问题(大多数解决方案都是由简单的错误找到)但我不能为我的生活做好准备为什么我的图形不能在我的jframe中显示。我是Java Graphics的新手,所以我非常感谢能得到的所有帮助。 (如果有人认为这是一个重复的问题,我要问的是,你等到我得到答案才能关闭它)

哦,同样,当我运行程序时,它告诉我调用重绘方法,如果这在某种程度上有帮助

package game.try5;

import java.awt.Dimension;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Window {

    public Window() {
        JFrame frame = new JFrame("Epic Game");
        frame.setSize(800,600);
        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GamePanel panel = new GamePanel();
        frame.add(panel);

        frame.setVisible(true);
    }

    public static void main(String[] args){
        Window window = new Window();
    }
}   

package game.try5;

import java.awt.Graphics;

import javax.swing.JPanel;

public class GamePanel extends JPanel{
    GameObject go = new GameObject(0,0,false,"Dog.jpg");

    public GamePanel(){
        repaint();
        System.out.println("Repaint method called");
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(go.getImg().getImage(), go.getxLoc(), go.getyLoc(), 50, 50, null);
        System.out.println("Graphics method called");
    }
}

package game.try5;

import java.awt.Dimension;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Window {

    public Window() {
        JFrame frame = new JFrame("Epic Game");
        frame.setSize(800,600);
        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GamePanel panel = new GamePanel();
        frame.add(panel);

        frame.setVisible(true);
    }

    public static void main(String[] args){
        Window window = new Window();
    }
}   

1 个答案:

答案 0 :(得分:2)

评论frame.setLayout(null);,你很可能会看到游戏。

  1. JFrame的默认布局目前为BorderLayout
  2. 添加到BorderLayout且没有约束的对象默认为CENTER
  3. CENTER BorderLayout中的一个对象被拉伸到可用的高度和高度。
  4. 由于代码调用frame.setSize(800,600);可用宽度和高度比框架装饰少800x600像素。
  5. 更好的全方位方法是:

    1. 让自定义绘制的组件覆盖getPreferredSize()以返回合理的值。
    2. 将组件添加到容器中。
    3. 最后,打包顶级窗口。这将使框架成为显示内容所需的最小尺寸。