JFrame中的图像不显示

时间:2015-12-30 11:21:59

标签: java image swing

我正在尝试将图像添加到我的程序中,但我遇到了其中2个问题。 Ball.png和ground.png不显示。

我在哪里弄错了?

当我添加球和地面的图像作为背景时,没有问题。

    public class Game extends JPanel implements ActionListener {

Image ball;
Image ground;
Image arrow;

public Game(){
    try {
        ball = ImageIO.read(new File("ball.png"));
    } catch (IOException e) { 
        System.out.println("pliku brak");
    }
    try {
        ground = ImageIO.read(new File("ground.png"));
    } catch (IOException ex) {
        System.out.println("pliku brak");
    } 
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(ball, 100, 100, null);
    g.drawImage(ground, 300, 300, null);
}
@Override
public void actionPerformed(ActionEvent e) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}


public class Start {
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            okienko();
        }
    });
}

public static void okienko()
{    

    JFrame frame = new JFrame("Hold The Ball");

    try
    {
        frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("background.png")))));
    } catch (IOException e)
        {
            System.out.println("pliku brak");
        }
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(new Game());
    frame.setSize(1000, 600);
    frame.setResizable(false);
    frame.setVisible(true);       
}
}

3 个答案:

答案 0 :(得分:2)

不要尝试对这样的组件进行分层。

这里最好的方法是在绘制其他游戏元素的同时绘制背景。要做到这一点:

  1. 更改

    Image arrow; 
    

    Image arrow; 
    Image bg; // declare the BG as a class attribute of the Game class
    
  2. 与其他两张图像同时加载BG。
  3. 首先在paintComponent(Graphics)方法中绘制BG(在0x0处)。

答案 1 :(得分:1)

您无法看到Game JPanel,因为JFrame已填充frame.setContentPane(...)背景JLabel。您需要使用LayoutManager才能将Panel放在另一个上。

 frame.setLayout(new BorderLayout());
 frame.add(new Game(), BorderLayout.CENTER);

将解决这个问题 但是,由于您的Game JPanel是最重要的,因此您将看不到背景。要解决此问题,您应该使此Panel具有不可见的背景 所以添加

setOpaque(false);

Game构造函数。

答案 2 :(得分:-1)

您应该将图像路径与ImageIcon一起使用,然后将setIcon用于JLabel。

ImageIcon icon = new ImageIcon(" images / background.png"); JLabel label = new JLabel(icon);

你可以读到这个: https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html