Moin Moin!
Ich möchte eine Info-Ebene (z.B. ein JPanel) über eine Spielfeld-Ebene (ist von JPanel abgeleitet) legen. Das übereinander Legen funktioniert sogar. Dazu verwende ich das CardLayout. Jedoch bekomme ich die Info-Ebene nicht transparent. Es sollten lediglich die Informationen (z.B. Schrift oder Animationen) die Elemente der Spielfeld-Ebene überschreiben. Hat jmd. eine Idee wie ich das hinbekomme?
Wenn man die Zeilen 31 bis 33 auskommentiert, dann wird das Spiel ordentlich angezeigt.
Diesem Posting habe ich auch den kompletten Code des Programms (Pong.zip) angehängt.
Ich würde mich sehr über eure Hilfe freuen!
Hier der Code des JFrame's:
Und hier der der Info-Ebene:
Ich möchte eine Info-Ebene (z.B. ein JPanel) über eine Spielfeld-Ebene (ist von JPanel abgeleitet) legen. Das übereinander Legen funktioniert sogar. Dazu verwende ich das CardLayout. Jedoch bekomme ich die Info-Ebene nicht transparent. Es sollten lediglich die Informationen (z.B. Schrift oder Animationen) die Elemente der Spielfeld-Ebene überschreiben. Hat jmd. eine Idee wie ich das hinbekomme?
Wenn man die Zeilen 31 bis 33 auskommentiert, dann wird das Spiel ordentlich angezeigt.
Diesem Posting habe ich auch den kompletten Code des Programms (Pong.zip) angehängt.
Ich würde mich sehr über eure Hilfe freuen!
Hier der Code des JFrame's:
Java:
public class MyFrame extends JFrame implements WindowListener, KeyListener {
private PongField field;
private InfoPanel info;
final static String CARD_FIELD = "Field";
final static String CARD_INFO = "Info";
public MyFrame(String title) {
super(title);
this.addWindowListener(this);
this.addKeyListener(this);
ScoreboardModel score = new ScoreboardModel();
Container cp = getContentPane();
cp.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
Scoreboard scoreboard = new Scoreboard(score);
gbc.gridy = 0;
gbc.gridx = 0;
add(scoreboard, gbc);
JPanel cards = new JPanel();
cards.setLayout(new CardLayout());
// cards.setPreferredSize(new Dimension(500, 300));
info = new InfoPanel();
cards.add(info, CARD_INFO);
info.start();
field = new PongField(score);
cards.add(field, CARD_FIELD);
gbc.gridy = 1;
gbc.gridx = 0;
add(cards, gbc);
pack();
centerFrame();
setResizable(false);
}
public void centerFrame() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation(
(screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2
);
}
// #####################################
// Interface: WindowListener
// #####################################
public void windowActivated(WindowEvent event) {}
public void windowClosed(WindowEvent event) {}
public void windowClosing(WindowEvent event) {
event.getWindow().setVisible(false);
event.getWindow().dispose();
System.out.println("Programm wurde geschlossen");
System.exit(0);
}
public void windowDeactivated(WindowEvent event) {}
public void windowDeiconified(WindowEvent event) {}
public void windowIconified(WindowEvent event) {}
public void windowOpened(WindowEvent event) {}
// #################################
// Interface: KeyListener
// #################################
public void keyPressed(KeyEvent event) {
field.keyPressed(event);
}
public void keyReleased(KeyEvent event) {
field.keyReleased(event);
}
public void keyTyped(KeyEvent event) {
}
}
Und hier der der Info-Ebene:
Java:
public class InfoPanel extends JComponent implements Runnable {
Thread thread;
int x = 50;
public InfoPanel() {
// this.setBackground(Color.BLUE);
// this.setOpaque(false);
this.thread = new Thread(this);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("nervige Test-Information", x, 100);
}
public void start() {
thread.start();
}
public void run () {
while(true) {
repaint();
if(x < 300) {
x++;
}
else {
x = 50;
}
try {
Thread.sleep(20);
}
catch(InterruptedException exception) {
}
}
}
}