JLayeredPane inhalt bleibt unsichtbar

PeteProgram

Mitglied
Hallo

Ich bekomme kein JLayeredPane gebacken. Was mach ich falsch, die 3 Versionen im Quelltext funtionierne bei mir alle nicht, d.h. ich sehe das JLabel nicht.

Code:
package test;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class PB {
 /**
  * @param args
  */
 public static void main(String[] args) {
  JFrame frame = new JFrame();
  JLabel label = new JLabel("label");
  label.setPreferredSize(new Dimension(20, 20));
  label.setOpaque(true);
  label.setBackground(Color.BLUE);
  label.setForeground(Color.BLACK);
  JLayeredPane layer = new JLayeredPane();
  layer.setPreferredSize(new Dimension(20, 20));
  layer.add(label, new Integer(JLayeredPane.DEFAULT_LAYER.intValue() + 1));
  // Version 1
  frame.add(layer);
  // Version 2
  // frame.getContentPane().add(layer);
  //  
  // Version 3
  // JPanel panel = new JPanel();
  // panel.add(layer);
  // frame.getContentPane().add(panel);
  frame.pack();
  frame.setVisible(true);
 }
}
 
Hallo Pete,

schau mal hier:

Java:
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.*;

public class LayeredExample extends JFrame {

	private static String name = LayeredExample.class.getName();

	private JLayeredPane lp = getLayeredPane();

	private JDragLabel dl1 = new JDragLabel("Eins");

	private JDragLabel dl2 = new JDragLabel("Zwei");

	private JDragLabel dl3 = new JDragLabel("Drei");

	public LayeredExample() {
		super(name);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);
		this.setSize(320, 480);

		lp.add(dl1, 10);
		lp.add(dl2, 15);
		lp.add(dl3, 20);
	}

	public static void main(String[] args) {
		LayeredExample sl = new LayeredExample();
		sl.setVisible(true);
	}

	class JDragLabel extends JLabel {
		private Point p1 = new Point(), p2 = new Point();

		public JDragLabel(String text) {
			super(text);
			this.setHorizontalAlignment(SwingConstants.CENTER);
			this.setOpaque(true);

			int c = (int) (Math.random() * 3);
			int x = (int) (Math.random() * 250);
			int y = (int) (Math.random() * 350);

			this.setBounds(x, y, 50, 50);

			switch (c) {
			case 0:
				this.setBackground(Color.RED);
				break;
			case 1:
				this.setBackground(Color.BLUE);
				break;
			default:
				this.setBackground(Color.GREEN);
			}

			this.addMouseListener(new MouseAdapter() {
				public void mousePressed(MouseEvent e) {
					p1.setLocation(e.getPoint());
				}
			});
			this.addMouseMotionListener(new MouseMotionAdapter() {
				public void mouseDragged(MouseEvent e) {
					p2 = e.getComponent().getParent().getMousePosition();
					JDragLabel.this.setLocation(p2.x - p1.x, p2.y - p1.y);
				}
			});
		}
	}
}


Vg Erdal
 
Zuletzt bearbeitet:
Danke

Dein Code hat mir kein bißchen mehr geholfen als die Java-Tutorials, die ich zu diesem Thema gegooglelt und bei Sun gefunden habe.

Mittlerweile habe ich herausgefunden, dass für die Komponente, die dem JLayeredPane hinzugefügt wird die "Bounds" angegeben werden müssen - Das war alles --> Wieder was gelernt.:rolleyes:
 
PeteProgram hat gesagt.:
Dein Code hat mir kein bißchen mehr geholfen als die Java-Tutorials, die ich zu diesem Thema gegooglelt und bei Sun gefunden habe.

Es hat aber mir geholfen, habe zum ersten mal JLayeredPane angewendet und verstanden wie man sie anwendet ;) .


Vg Erdal
 
Zurück