Layered Panels

mariusmeier

Mitglied
Hallo zusammen

Ist es möglich, mit JLayeredPane zwei Panels hinzuzufügen, welche Transparent sind? Ich will sozusagen einen Grundlayer (Panel 1) auf welchem ich irgendetwas zeichne und darüber will ich einen zweiten Layer (Panel 2) legen, welche die untere Zeichnung durch selbst gezeichnete Objekte ergänzt. Dieser Zweite Layer muss aber den Grundlayer durchscheinen lassen, so dass man beide Layer sieht. Sollte doch mit setOpaque() möglich sein nicht? Oder verwendet man für solch ein Szenario gar nicht JLayeredPane sondern was anderes?

Java:
public LayeredPaneTest() {
		layeredPane = new JLayeredPane();
		layeredPane.setPreferredSize(new Dimension(400,400));
		//layeredPane.setOpaque(true);
		btOk = new JButton("OK");
		panel1 = new JPanel();
		panel1.setLayout(null);
		//panel1.setOpaque(true);
		btOk.setBounds(10, 10, 100, 25);
		panel1.add(btOk);
		panel1.setBorder(BorderFactory.createEtchedBorder());
		btCancel = new JButton("Cancel");
		panel2 = new JPanel();
		panel2.setLayout(null);
		panel2.setOpaque(true);
		btCancel.setBounds(40, 40, 100, 25);
		panel2.add(btCancel);
		panel2.setBorder(BorderFactory.createEtchedBorder());
		layeredPane.setLayout(new GridBagLayout());
		layeredPane.add(panel1, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0), 0);
		layeredPane.add(panel2, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0), 1);
		
		setLayout(new GridBagLayout());
		add(layeredPane, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0));
		
	}

Mit dem obigen code wollte ich bezwecken, dass der Button OK auf dem ersten Panel zu liegen kommt und der Button Cancel auf dem zweiten Panel. Jedoch wird der Cancel Button nicht durch die obere Panel schicht hindurchgezeichnet. Erst wenn ich in dieser Region darüberfahre, dann wird er gezeichnet... irgendwas mache ich falsch?

MFG
 
eine typische Ursache für alle Arten von Anzeigefehlern ist ein zu frühes setVisible(true);
kann man nur im Gesamtprogramm beurteilen
 
Ok mein gesamter Code sieht folgendermassen aus:

Java:
public class LayeredPaneTest extends JFrame {
	JLayeredPane layeredPane;
	JPanel panel1;
	JPanel panel2;
	JButton btOk;
	JButton btCancel;
	
	public LayeredPaneTest() {
		layeredPane = new JLayeredPane();
		layeredPane.setPreferredSize(new Dimension(400,400));
		//layeredPane.setOpaque(true);
		btOk = new JButton("OK");
		panel1 = new JPanel();
		panel1.setLayout(null);
		//panel1.setOpaque(true);
		btOk.setBounds(10, 10, 100, 25);
		panel1.add(btOk);
		panel1.setBorder(BorderFactory.createEtchedBorder());
		btCancel = new JButton("Cancel");
		panel2 = new JPanel();
		panel2.setLayout(null);
		panel2.setOpaque(true);
		btCancel.setBounds(40, 40, 100, 25);
		panel2.add(btCancel);
		panel2.setBorder(BorderFactory.createEtchedBorder());
		layeredPane.setLayout(new GridBagLayout());
		layeredPane.add(panel1, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0), 0);
		layeredPane.add(panel2, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0), 1);
		
		setLayout(new GridBagLayout());
		add(layeredPane, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 10, 10, 10), 0, 0));
		
	}
	
	public static void main(String [] args) {
		LayeredPaneTest frame = new LayeredPaneTest();
		frame.setSize(new Dimension(500,500));
		frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		frame.setVisible(true);
	}
}

MFG
 
hmm, dann vermute ich dass du JLayeredPane falsch einsetzt, was soll das denn bewirken und auf welche Weise?
JLayeredPane.DEFAULT_LAYER usw. wie z.B. in
JLayeredPane
angegeben verwendest du nicht

ich habe bei mir testweise layeredPane zu einem JPanel gemacht und da gibts keinen Unterschied,
die beiden Unterpanel fügst du an exakt derselben Position ein, inwiefern dann ein sinnvolles Verhalten definiert ist weiß ich nicht,

damit die Panel durchsichtig sind, musst du
setOpaque(false);
eintippen, nicht true,
in dem Fall sieht man dann auch beide Buttons sofort,
(was allerdings nicht erklärt warum anderenfalls der zweite Button später erscheint)
 
Ok in diesem Fall werde ich nochmals das JLayeredPane studieren.
Das ganze soll schlussendlich so funktionieren: 2 Layers
1. Layer zeichnet das Koordinaten System (Grid etc.)
2. Layer zeichnet Linien ins Koordinaten System (plots etc.)

MFG
 
Ok ja mit setOpaque = false funktioniert das wunderbar. Habe die JavaDoc immer falsch gelesen. Für mich war true für transparent logischer 😉 dort steht aber Otherwise set blablaba false.... 🙂
Danke

MFG
 

Neue Themen


Zurück
Oben