Хорошо, это похоже на очень простую задачу, но я не могу ее получить. Все, что я хочу, это иметь изображение (jpg) в качестве фона для моей прорывной игры. Вот мой код:Установить фоновое изображение для JPanel в Java Breakout Game
Главный класс:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Breakout extends JFrame {
public Breakout()
{
add(new BreakBoard());
setTitle("Breakout");
setSize(BreakCommons.WIDTH, BreakCommons.HEIGTH);
setLocationRelativeTo(null);
setIgnoreRepaint(true);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new Breakout();
}
}
Board Класс:
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BreakBoard extends JPanel implements BreakCommons {
ImageIcon icon = new ImageIcon("../pacpix/love.jpg");
Timer timer;
String message = "Game Over";
BreakBall ball;
BreakPaddle paddle;
BreakBrick bricks[];
boolean ingame = true;
int timerId;
public BreakBoard() {
setOpaque(false);
addKeyListener(new TAdapter());
setFocusable(true);
//setBackground(Color.white);
bricks = new BreakBrick[30];
setDoubleBuffered(true);
timer = new Timer();
timer.scheduleAtFixedRate(new ScheduleTask(), 1000, 10);
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(icon.getImage(), 10, 10, this);
if (ingame) {
g.drawImage(ball.getImage(), ball.getX(), ball.getY(),
ball.getWidth(), ball.getHeight(), this);
g.drawImage(paddle.getImage(), paddle.getX(), paddle.getY(),
paddle.getWidth(), paddle.getHeight(), this);
for (int i = 0; i < 30; i++) {
if (!bricks[i].isDestroyed())
g.drawImage(bricks[i].getImage(), bricks[i].getX(),
bricks[i].getY(), bricks[i].getWidth(),
bricks[i].getHeight(), this);
}
} else {
Font font = new Font("Verdana", Font.BOLD, 18);
FontMetrics metr = this.getFontMetrics(font);
g.setColor(Color.BLACK);
g.setFont(font);
g.drawString(message,
(BreakCommons.WIDTH - metr.stringWidth(message))/2,
BreakCommons.WIDTH/2);
}
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
Таким образом, изображение хранится в переменной icon
и находится в моих исходных файлов (вместе с моими классами) поэтому я знаю, что путь правильный. Я попытался установить рамку и панель на setOpaque(false)
, но это просто изменило фоновый цвет на серый. Я могу легко установить цвет фона на setBackground(Color.white);
, но как установить изображение?
Я попытался поместить изображение в JLabel, а затем добавить его в JPanel, но это не дало никаких результатов. Буду признателен за любую помощь, и спасибо заранее! Я могу предоставить дополнительную информацию по мере необходимости.
Пожалуйста, вы можете объяснить, что это делает/как он будет соответствовать моему коду? – CodeAddict
Это JPanel с фоновым изображением. Используйте IPanel вместо JPanel в коде. При необходимости измените настройки. – Java42
это не работает. и я так смущен, где бы я это сказал? Мой код на самом деле не имеет места для этого, что я могу видеть. Не могли бы вы объяснить логику вашего кода? – CodeAddict