Hallo zusammen,
ich bin eigentlich kein Anfänger mehr, aber ich komme nicht drauf warum in meinem Programm die Hintergrundfarbe des JPanels sich nicht ändert.
Hier mein Code und eine kurze Erläuterung:
Erläuterung: Die Klasse GamePanel soll ein JPanel darstellen welches eine bestimmte Größe hat. Es wird später einer Klasse welche JFrame erweitert hinzugefügt. Sie soll ein Rechteck mit der Farbe weiß zeichnen, was auch funktioniert
Im Konstruktor der Klasse GamePanel wird die Hintergrundfarbe auf schwarz gesetzt, was leider nicht funktioniert.
public class GamePanel extends JPanel implements Runnable{
final int originalTileSize = 16; //16x16 tiles
final int scale = 3;
final int tileSize = originalTileSize * scale;
final int maxScreenColumn = 24;
final int maxScreenRow = 20;
final int screenWidth = tileSize * maxScreenColumn;
final int screenHeight = tileSize * maxScreenRow;
JButton button;
Thread thread;
private static final long serialVersionUID = 1L;
/** Konstruktor **/
public GamePanel() {
this.setLayout(null);
this.setPreferredSize(new Dimension(screenWidth,screenHeight));
this.setDoubleBuffered(true); //for better rendering performance
this.setOpaque(true);
this.setBackground(Color.black);
}
/**
* Starts timing via a thread
*/
public void startGame() {
thread = new Thread(this);
thread.start(); // Will call run method
}
@Override
public void run() {
while(thread != null) {
System.out.println(System.currentTimeMillis());
}
}
/** Will be called with repaint() **/
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
g2d.fillRect(50, 50, tileSize, tileSize);
g2d.dispose();
}
}
-------------------------------------------------------------------------------------------------------------------------------
Hier die Klasse GameWindow welche das Fenster repräsentiert und wo das JPanel hinzugefügt wird. Das Fenster das ich dann dargestellt bekomme seht ihr im Anhang.
public class GameWindow extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
/**
* Constructor
*/
public GameWindow() {
this.setTitle("FirstGame");
GamePanel panel = new GamePanel();
panel.startGame();
this.add(panel);
this.pack();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
JETZT DIE GROSSE FRAGE: Warum wird mein JPanel nicht schwarz angezeigt mit dem weißen Rechteck oben drauf ?
Wenn ich vom GameWindow die Hintergrundfarbe auf schwarz ändere, ist der Fensterhintergrund auch schwarz aber so will ich das eigentlich nicht.
Vielen Dank vorab schonmal für eure Hilfe
ich bin eigentlich kein Anfänger mehr, aber ich komme nicht drauf warum in meinem Programm die Hintergrundfarbe des JPanels sich nicht ändert.
Hier mein Code und eine kurze Erläuterung:
Erläuterung: Die Klasse GamePanel soll ein JPanel darstellen welches eine bestimmte Größe hat. Es wird später einer Klasse welche JFrame erweitert hinzugefügt. Sie soll ein Rechteck mit der Farbe weiß zeichnen, was auch funktioniert
Im Konstruktor der Klasse GamePanel wird die Hintergrundfarbe auf schwarz gesetzt, was leider nicht funktioniert.
public class GamePanel extends JPanel implements Runnable{
final int originalTileSize = 16; //16x16 tiles
final int scale = 3;
final int tileSize = originalTileSize * scale;
final int maxScreenColumn = 24;
final int maxScreenRow = 20;
final int screenWidth = tileSize * maxScreenColumn;
final int screenHeight = tileSize * maxScreenRow;
JButton button;
Thread thread;
private static final long serialVersionUID = 1L;
/** Konstruktor **/
public GamePanel() {
this.setLayout(null);
this.setPreferredSize(new Dimension(screenWidth,screenHeight));
this.setDoubleBuffered(true); //for better rendering performance
this.setOpaque(true);
this.setBackground(Color.black);
}
/**
* Starts timing via a thread
*/
public void startGame() {
thread = new Thread(this);
thread.start(); // Will call run method
}
@Override
public void run() {
while(thread != null) {
System.out.println(System.currentTimeMillis());
}
}
/** Will be called with repaint() **/
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
g2d.fillRect(50, 50, tileSize, tileSize);
g2d.dispose();
}
}
-------------------------------------------------------------------------------------------------------------------------------
Hier die Klasse GameWindow welche das Fenster repräsentiert und wo das JPanel hinzugefügt wird. Das Fenster das ich dann dargestellt bekomme seht ihr im Anhang.
public class GameWindow extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
/**
* Constructor
*/
public GameWindow() {
this.setTitle("FirstGame");
GamePanel panel = new GamePanel();
panel.startGame();
this.add(panel);
this.pack();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
JETZT DIE GROSSE FRAGE: Warum wird mein JPanel nicht schwarz angezeigt mit dem weißen Rechteck oben drauf ?
Wenn ich vom GameWindow die Hintergrundfarbe auf schwarz ändere, ist der Fensterhintergrund auch schwarz aber so will ich das eigentlich nicht.
Vielen Dank vorab schonmal für eure Hilfe