Set Hintergrundbild für JPanel im Java-Breakout-Spiel
Okay, das scheint wie eine wirklich einfache Aufgabe, aber ich kann nicht scheinen, um es zu bekommen. Alles was ich will ist ein Bild (jpg) als hintergrund auf meinem breakout-Spiel. Hier ist mein code:
Main-Klasse:
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 Class:
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();
}
Also das Bild ist gespeichert in der variable icon
und befindet sich in meine source-Dateien (zusammen mit meiner Klassen), damit ich weiß, dass der Pfad richtig ist. Ich habe versucht, den Rahmen und panel zu setOpaque(false)
aber das wurde nur der hintergrund auf Standard-Grau. Ich kann einfach legen Sie die Hintergrundfarbe, indem Sie setBackground(Color.white);
, aber wie setze ich ein Bild?
Habe ich versucht, indem das Bild in ein JLabel und dann hinzufügen, um das JPanel, aber das ergab keine Ergebnisse. Ich würde schätzen jede Hilfe, und danke im Voraus! Ich kann mehr Informationen liefern, als benötigt wird.
InformationsquelleAutor CodeAddict | 2013-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
einfache Weise erstellen Sie zunächst eine separate Klasse für jpane
verwenden, wie es
InformationsquelleAutor Adel
Dies ist ein JPanel mit einem Hintergrundbild. Verwenden IPanel anstelle von JPanel in Ihrem code. Tweak wie erforderlich, um Ihre Bedürfnisse anzupassen.
Beispiel:
Produziert:
Dies ist ein JPanel mit einem Hintergrundbild. Verwenden IPanel anstelle von JPanel in Ihrem code. Tweak wie erforderlich.
das funktioniert aber nicht. und ich bin so verwirrt, wo soll ich das stellen?? Mein code nicht wirklich ein Ort für diese, die ich sehen kann. Erklären Sie die Logik des Codes?
Jetzt bin ich verwirrt...Du sagst es funktioniert nicht, aber man weiß nicht, wo es zu benutzen. Dieser code ist ein JPanel mit einem Bild für einen hintergrund. Es heißt IPanel. Anstelle der Verwendung einer standard JPanel, verwenden Sie das IPanel. Sie müssten ein paar Veränderungen - wie z.B. das hinzufügen einer null-arg-CTOR und eine Set() für das Bild. Dann vielleicht ändern "BreakBoard extends JPanel" zu "BreakBoard erstreckt IPanel". Siehe das Beispiel in meiner Antwort. Ort, in einer main () - Methode zu testen. Hoffe, das hilft.
Haha, ich versuchte, es in mein code und es hat nicht funktioniert, das ist, warum. Nutzen Sie also IPanel anstelle von JPanel, macht IPanel die gleiche Arbeit, wie JPanel? Ich dachte wirklich, es war einfacher, als dies, wie vielleicht fünf Zeilen code max. Wow xD
InformationsquelleAutor Java42
Ich es geschafft habe endlich!
Für die Zukunft sucht, oder jene, die neugierig sind, die ich verwendet http://zetcode.com/tutorials/javagamestutorial/basics/. Tolle Seite für Anfänger! (Oder solche, die Verdummung-down zu verstehen ist)
auch wenn es zu funktionieren scheint - überschreiben von Farbe ist der falsche Ansatz in Swing: überschreiben Sie stattdessen paintComponent
InformationsquelleAutor CodeAddict
InformationsquelleAutor vamsi