[gelöst] Swing Elemente verdecken

Status
Nicht offen für weitere Antworten.

Hirnspender

Mitglied
Hallo,

ich habe in ein JPanel zwei von mir erstelle Swing Komponenten hinzugefügt. Das erste ist einfach ein grünes Rechteck und das zweite ist eine gestrichelte Linie, die quer durch das Rechteck hindurchgeht.
Meine Frage, wie krieg ich das hin, dass das grüne Rechteck die gestrichelte Linie verdeckt ??
Ich habe es schon mit setOpaque(...) und setComponentZOrder(...) versucht, aber die gestrichelte Linie scheint trotzdem noch durch.

Vielen Dank im Vorraus!

P.S.: Layout des JPanels ist auf null gesetzt, was auch so bleiben soll!
 
Zuletzt bearbeitet:
warum auch immer du null-layout verwenden möchtest ...
Einfacher wäre ein Cardlayout.

Was sind das denn für Komponenten?
setVisible auf die gestrichelte Linie wäre eine Möglichkeit
 
Die Komponenten sind selbst erstellt, also von JComponent abgeleitet, und die gestrichelte Linie soll nicht komplett unsichtbar werden, sondern nur an der Stelle wo das Rechteck drüber liegt.

Ich habe null als Layout gewählt, damit ich die exakte Position im JPanel festlegen kann.
 
ich glaub er hätte gern die Variante das die Linie an 2 Seiten hervorschauen könnte.
Nur da wo das Rechteckt ist wird sie verdeckt .. klingt ein wenig nach eigenem Editor für Diagramme ^^
 
Die Komponenten sind selbst erstellt, also von JComponent abgeleitet, und die gestrichelte Linie soll nicht komplett unsichtbar werden, sondern nur an der Stelle wo das Rechteck drüber liegt.

Ich habe null als Layout gewählt, damit ich die exakte Position im JPanel festlegen kann.

Die Reihenfolge in der die Komponenten zum Panel geaddet werden kann auch entscheidend sein
 
ich würde in dem Fall vielleicht mit verschiedenen Layer arbeiten .. einer für simple Verbindungslinien .. einer für darzustellende Komponenten, wie Rechtecke etc. und vielleicht noch weitere .. je nach Anwendung. Habe noch nicht mit solchen Use-Cases gearbeitet aber vielleicht hilft dir das JLayeredPane weiter
 
ich würde in dem Fall vielleicht mit verschiedenen Layer arbeiten .. einer für simple Verbindungslinien .. einer für darzustellende Komponenten, wie Rechtecke etc. und vielleicht noch weitere .. je nach Anwendung. Habe noch nicht mit solchen Use-Cases gearbeitet aber vielleicht hilft dir das JLayeredPane weiter

Würd ich (in dem Fall) auch so machen, aber er beharrt ja auf Null-Layout 😉
 
könnte er ja immer noch pro layer verwenden oder nicht? .. Was wäre an einem null-Layout für Diagramme verkehrt? schliesslich geht es ja darum etwas zu zeichnen.
 
Ich würde ganz gerne wieder von dieser Grundsatzdiskussion um Layers wegkommen und mich dem eigentlich Problem mit dem Verdecken widmen !
 
Vielleicht nicht perfekt aber evtl. hilft es dir weiter!

Java:
final JPanel panel = new JPanel(null);
add(panel);

final Rectangle rect = new Rectangle(20, 20, 360, 360);

final JComponent rectComponent = new JPanel(null) {
	@Override
	public void paint(final Graphics g) {
		super.paint(g);
		g.setColor(Color.BLUE);
		g.drawRect(10, 10, 340, 340);
	}
};
rectComponent.setBounds(rect);
panel.add(rectComponent);

final JComponent lineComponent = new JPanel(null) {
	@Override
	public void paint(final Graphics g) {
		super.paint(g);
		g.drawLine(0, 0, 360, 360);
	}
};
lineComponent.setBounds(rect);
panel.add(lineComponent);

final Thread t = new Thread(new Runnable() {
	public void run() {
		while (true) {
			try {
				Thread.sleep(1000);
				panel.setComponentZOrder(rectComponent, 0);
				panel.repaint();
				
				Thread.sleep(1000);
				panel.setComponentZOrder(lineComponent, 0);
				panel.repaint();
				
			} catch (final InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
});
t.start();
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben