无法在图像上显示图像

时间:2019-03-08 21:05:02

标签: java image swing

我试图显示背景和角色,对于我试图制作的项目(游戏)。

当我显示其中一幅图像时,我看不到另一幅图像。

import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;

public class Main{
    private static final Keys jeez = null;

    public static void main(String[] args) throws IOException {
        int x = 250;
        int y = 250;
        BufferedImage myPicture = ImageIO.read(new File("C:\\Users\\milkg\\Desktop\\Game\\background.png"));
        JPanel background = new JPanel();
        JLabel picLabel = new JLabel(new ImageIcon(myPicture));
        background.add(picLabel);
        BufferedImage myPicture1 = ImageIO.read(new File("C:\\Users\\milkg\\Desktop\\Game\\background.png"));
        JPanel character = new JPanel();
        JLabel picLabel1 = new JLabel(new ImageIcon(myPicture1));
        character.add(picLabel1);
        JFrame Window = new JFrame("Something");
        Window.setSize(1280, 720);
        Window.setDefaultCloseOperation(Window.EXIT_ON_CLOSE);
        Window.setLocation(200, 100);
        Window.setResizable(false);
        Window.add(background);
        Window.add(character);
        Keys Key = new Keys(x, y, Window);
        Window.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:0)

  

图像在图像上

如果要在背景图像上方显示一幅图像,则需要将前景图像添加到背景图像中。

因此基本逻辑将类似于:

JLabel foreground = new JLabel( new ImageIcon(...) );
JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( new BorderLayout() );
background.add( foreground );
window.add( background );

请注意,不必仅使用面板来显示JLabel。 JFrame的内容窗格是JPanel,因此您可以将标签直接添加到框架。

  

尝试制作(游戏)

但是,如果您尝试制作游戏,则可能需要进行自定义绘画,以便可以控制每个图像的位置:

在这种情况下的基本逻辑是:

JPanel gamePane = new JPanel()
{
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(background, ?, ?, this);
        g.drawImage(foreground, ?, ?, this);
    }
};

现在,前景图像将绘制在背景图像的顶部。

当然,您应该使用方法来设计适当的类,以使您可以在“背景”上移动“字符”。

答案 1 :(得分:0)

首先,您上载的代码中的漫游器路径指向同一文件。 然后,仅通过将标签彼此叠加即可在标签上方显示标签。

我建议创建一个JPanel()的子类,您可以在其中重写绘画组件方法,例如:

JPanel panel = new JPanel(){
   public void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawImage(yourImage,x,y,imageObserver);
   }
};