Swing Info-Ebene überdeckt Spielfeld-Ebene komplett

Curry

Aktives Mitglied
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:
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) {
			}
		}
	}

}
 

Anhänge

  • Pong.zip
    8,2 KB · Aufrufe: 0

Michael...

Top Contributor
Das CardLayout legt m.W. keine Komponenten übereinander. Es ist dafür gedacht Komponten dynamisch zur Laufzeit gegen andere auszutauschen.
Zum Stapeln von Komponenten könnte man z.B. JLayeredPane verwenden.
 

Quaxli

Top Contributor
Oder Du nimmst gar keine Swing-Komponente, sondern bastelst Dir was eigenes, was sich selbst über das Graphics-Objekt Deines Spiels zeichnet.
 

Curry

Aktives Mitglied
Mit dem GlassPane habe ich es hinbekommen! Vielen Dank für den Tipp!

Etwas Eigenes basteln klingt aber auch sehr spannend und da es mir gerade primär um das Lernen geht würde ich das gerne mal ausprobieren, nur habe ich keine Idee wie ich da beginne. Brauche ich zum Zeichnen nicht immer irgendeine paint() oder paintComponent() einer GUI-Komponente? Würde mich sehr über Tipps, z.B. auch Links zu Tutorials, freuen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
O Info Popup AWT, Swing, JavaFX & SWT 9
T Info Datei AWT, Swing, JavaFX & SWT 3
O JPanel - Info speichern AWT, Swing, JavaFX & SWT 2
L Eine Sprechblase als Info. AWT, Swing, JavaFX & SWT 2
G JMenu Info-Fenster ganz Rechts AWT, Swing, JavaFX & SWT 5
N SWT In welche Ebene gehört dann die function() AWT, Swing, JavaFX & SWT 8
I Swing Ordnerauswahl ist in der falschen Ebene AWT, Swing, JavaFX & SWT 1
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
P Welche Methode um Punkte in xy Ebene zu zeichnen? AWT, Swing, JavaFX & SWT 4
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
D Z-Ebene AWT, Swing, JavaFX & SWT 4
K InnerFrame Select-Ebene verändern AWT, Swing, JavaFX & SWT 7
D JTree, einschränken auf Child Ebene AWT, Swing, JavaFX & SWT 3
R JTree: Icon pro "Ebene" AWT, Swing, JavaFX & SWT 5
F JTree - Schriftfarbe der Elemente in erster Ebene ändern AWT, Swing, JavaFX & SWT 8
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
I swing fenster neu zeichnen, wenn überdeckt AWT, Swing, JavaFX & SWT 8
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
A paintComponent überdeckt ... AWT, Swing, JavaFX & SWT 13
J Fensterrand überdeckt Hintergrund AWT, Swing, JavaFX & SWT 9
Kidao Das Hintergrundbild überdeckt die Swing-Komponente AWT, Swing, JavaFX & SWT 5
M Textfeld überdeckt Combobox :autsch: AWT, Swing, JavaFX & SWT 3
R JMenu einträge werden überdeckt AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben