Java JFrame中的背景图像
所以我用Java开发了一个游戏,我在给我的JFrame添加图像时得到了其他东西,这是一个球拍游戏,我使用eclipse。我个人认为这是目录问题,所以我把png文件放在src文件夹中作为参考。! 下面是我的Game2类的代码:Java JFrame中的背景图像,java,image,swing,embedded-resource,imageicon,Java,Image,Swing,Embedded Resource,Imageicon,所以我用Java开发了一个游戏,我在给我的JFrame添加图像时得到了其他东西,这是一个球拍游戏,我使用eclipse。我个人认为这是目录问题,所以我把png文件放在src文件夹中作为参考。! 下面是我的Game2类的代码: package Challenger; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.R
package Challenger;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game2 extends JPanel {
Ball ball = new Ball(this);
Ball ball2 = new Ball(this);
Racquet racquet = new Racquet(this);
float speed = (float) 1.0;
int score;
private JButton playMore;
private JButton exitPlease;
static JFrame frame = new JFrame("Challenger");
private Icon defaultImg;
private JLabel bck;
private int getScore() {
return score;
}
public Game2() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
racquet.keyReleased(e);
}
@Override
public void keyPressed(KeyEvent e) {
racquet.keyPressed(e);
}
});
setFocusable(true);
bck=new JLabel(new ImageIcon("bg.png"));
bck.setBounds(0, 0, 300, 400);
frame.add(bck);
}
private void move() {
ball.move();
if(score >= 10)
{
float tempSpeed = ball2.getSpeed();
ball2.move2(tempSpeed);
}
racquet.move();
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Graphics2D g3d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ball.paint(g2d);
racquet.paint(g2d);
if( score >= 10)
{
ball2.paint(g3d);
}
g2d.setColor(Color.RED);
g2d.setFont(new Font("Verdana", Font.BOLD, 20));
g2d.drawString("Score: "+ String.valueOf(getScore()), 10, 30);
}
public void gameOver() {
JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION);
JOptionPane.showMessageDialog(this, "Your score is: " + getScore(),
"Game Over", JOptionPane.YES_NO_OPTION);
JOptionPane.showMessageDialog(this, "Created By:\n1) DDP-FA12-BCS-009\n2) DDP-FA12-BCS-230\n3) DDP-FA12-BCS-165\n", "Game Over", JOptionPane.YES_NO_OPTION);
System.exit(ABORT);
}
public static void main(String[] args) throws InterruptedException {
Game2 game = new Game2();
frame.add(game);
frame.setSize(300, 400);
frame.setResizable(false);
frame.setVisible(true);
frame.setAlwaysOnTop(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true) {
game.move();
game.repaint();
Thread.sleep(10);
}
}
}
这是我的球类课程:
package Challenger;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
public class Ball {
private static final int DIAMETER = 30;
float x = 0;
float y = 0;
float xa = 1;
float ya = 1;
private Game2 game;
public Ball(Game2 game) {
this.game= game;
}
void move() {
boolean changeDirection = true;
if (x + xa < 0.0)
xa = game.speed;
else if (x + xa > game.getWidth() - DIAMETER)
xa = -game.speed;
else if (y + ya < 0.0)
ya = game.speed;
else if (y + ya > game.getHeight() - DIAMETER)
game.gameOver();
else if (collision()){
ya = -game.speed;
y = game.racquet.getTopY() - DIAMETER;
game.score++;
game.speed = (float) (game.speed + 0.10);
} else
changeDirection = false;
x = x + xa;
y = y + ya;
}
void move2(float speed) {
boolean changeDirection = true;
if (x + xa < 0.0)
xa = speed;
else if (x + xa > game.getWidth() - DIAMETER)
xa = -speed;
else if (y + ya < 0.0)
ya = speed;
else if (y + ya > game.getHeight() - DIAMETER)
game.gameOver();
else if (collision()){
ya = -speed;
y = game.racquet.getTopY() - DIAMETER;
game.score++;
speed = (float) (speed + 0.25);
} else
changeDirection = false;
x = x + xa;
y = y + ya;
}
public float getSpeed(){
return game.speed;
}
public void paint(Graphics2D g) {
g.setColor(Color.BLUE);
g.fillOval((int) x, (int) y, 30, 30);
}
private boolean collision() {
return game.racquet.getBounds().intersects(getBounds());
}
public Rectangle getBounds() {
return new Rectangle((int) x, (int) y, DIAMETER, DIAMETER);
}
}
包挑战者;
导入java.awt.Color;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
公共班级舞会{
专用静态最终内径=30;
浮动x=0;
浮动y=0;
浮点xa=1;
浮动ya=1;
私人游戏2;
公共舞会(第二场){
这个。游戏=游戏;
}
无效移动(){
布尔值changeDirection=true;
if(x+xa<0.0)
xa=游戏速度;
else if(x+xa>game.getWidth()-DIAMETER)
xa=-game.speed;
否则如果(y+ya<0.0)
ya=游戏速度;
else if(y+ya>game.getHeight()-DIAMETER)
game.gameOver();
else if(collision()){
ya=-game.speed;
y=游戏.racket.getTopY()-直径;
游戏。分数++;
游戏速度=(浮动)(游戏速度+0.10);
}否则
改变方向=错误;
x=x+xa;
y=y+ya;
}
无效移动2(浮动速度){
布尔值changeDirection=true;
if(x+xa<0.0)
xa=速度;
else if(x+xa>game.getWidth()-DIAMETER)
xa=速度;
否则如果(y+ya<0.0)
ya=速度;
else if(y+ya>game.getHeight()-DIAMETER)
game.gameOver();
else if(collision()){
ya=速度;
y=游戏.racket.getTopY()-直径;
游戏。分数++;
速度=(浮动)(速度+0.25);
}否则
改变方向=错误;
x=x+xa;
y=y+ya;
}
公共浮点getSpeed(){
返回游戏。速度;
}
公共空隙涂料(图2D g){
g、 setColor(Color.BLUE);
g、 椭圆形((int)x,(int)y,30,30);
}
私有布尔冲突(){
返回游戏。网拍。getBounds()。相交(getBounds());
}
公共矩形getBounds(){
返回新矩形((int)x,(int)y,直径,直径);
}
}
这是我的Raquet课程:
package Challenger;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
public class Racquet {
int x = 0;
int xa = 0;
private static final int Y = 330;
private static final int WIDTH = 60;
private static final int HEIGHT = 10;
private Game2 game;
public Racquet(Game2 game) {
this.game= game;
}
public void move() {
if (x + xa > 0 && x + xa < game.getWidth()-60)
x = x + xa;
}
public void paint(Graphics2D g) {
g.setColor(Color.BLACK);
g.fillRect(x, 330, 60, 10);
}
public void keyReleased(KeyEvent e) {
xa = 0;
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT)
xa = (int) (-game.speed - 1);
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
xa = (int) (game.speed + 1);
}
public Rectangle getBounds() {
return new Rectangle(x, Y, WIDTH, HEIGHT);
}
public int getTopY() {
return Y;
}
}
包挑战者;
导入java.awt.Color;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.awt.event.KeyEvent;
公营网拍{
int x=0;
int-xa=0;
专用静态最终整数Y=330;
专用静态最终整数宽度=60;
专用静态最终整数高度=10;
私人游戏2;
公共网拍(第二场){
这个。游戏=游戏;
}
公开作废动议(){
如果(x+xa>0&&x+xa
- 您应该使用如下URL嵌入资源
java.net.URL url = getClass().getResource("bg.png"); if (url != null) { bck = new JLabel(new ImageIcon(url); } else { System.err.println("Could not find Image"); }
.class
文件,而不是.java
文件
ProjectRoot
bin
challenger
Racquet.class
Ball.class
Game2.class
bg.png
上面是Eclipse文件结构。在Netbeans中,您希望查看build/classes/challenger/
- 如果您计划在背景上为游戏绘制一个面板,您可能需要使用分层窗格。您正在添加背景标签,然后将游戏面板添加到框架中。这不会给你一个分层的效果
见在部署时,这些资源可能会成为一种资源。在这种情况下,必须通过
URL
而不是File
访问资源。有关形成URL
的方法,请参阅标签的。