我正在尝试将图像添加到我的程序中,但我遇到了其中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);
}
}
答案 0 :(得分:2)
不要尝试对这样的组件进行分层。
这里最好的方法是在绘制其他游戏元素的同时绘制背景。要做到这一点:
更改
Image arrow;
到
Image arrow;
Image bg; // declare the BG as a class attribute of the Game class
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