Feste Position einer Komponente auf Glasspane

sicLotus

Bekanntes Mitglied
Hallo,

ich benutze ein Glasspane auf der ich einen JButton habe. Jetzt würde ich gerne explizit für diesen Button festlegen, das er an der Position x,y sein soll. Aber ich bekomm das beim besten Willen nicht hin.
Ich hab's mit setLocation und mit setBounds probiert.. es zeigt alles keine Wirkung..

Hier mal mein Code:
Java:
public class MyFrame extends JFrame {

	private static final long serialVersionUID = 1L;

	public MyFrame() {
		super("blabla");
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	

		MyModel model = new MyModel();
		MyView view = new MyView(model);
		add(view);
		setSize(500, 200);
		pack();

		JButton testb = new JButton("test");
		testb.setOpaque(false);
		//testb.setLocation(500, 150);
		//testb.setBounds(50, 50, 100, 100);
		
		this.setGlassPane(testb);
		this.getGlassPane().setVisible(true);
		setResizable(false);
	}

	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		MyFrame mf = new MyFrame();
		mf.setVisible(true);

	}

Geht das nicht? Sollte doch aber >.<
 
ich benutze ein Glasspane auf der ich einen JButton habe. Jetzt würde ich gerne explizit für diesen Button festlegen, das er an der Position x,y sein soll.
Feste Positionen sind eher unschön (Resize, unterschiedliche Auflösungen...) wenn's unbedingt sein muss: nimm das sogn. Null Layout, entferne also den LayoutManager der GlassPane, in dem Du darauf setLayout(null); aufrufst, damit wird auch die absolute Positionierung akzeptiert.
 
Also von der Glasspane direkt kann ich gar kein Layout ändern.. ich habs aber von der contentPane auf "null" gesetzt..

Weiterhin hab ich jetzt das Problem das ein zweiter Button hinzugekommen ist, und ich ja scheinbar nur über "setGlassPane();" eine Komponente hinzufügen kann, also hab ich da nen JPanel draus gemacht.
Aber wenn ich auf dem JPanel den LayoutManger null angegeben habe, seitdem sind die Buttons gar nicht mehr zu finden.. egal welche Location ich setze :/
 
Aus Neugierde: Was hast Du mit den Buttons auf der GlassPane vor? Warum?

Wenn sie nicht angezeigt werden, dann sind sie eventuell:
- nicht auf dem Panel "verbaut"
- werden auf einer andern Komponente verwendet
- falsch positioniert
 
Ich möchte die Buttons über einer Textarea an einer bestimmten Stelle positionieren.. normalerweise geht das ja auf ein und derselben Pane nicht (also 2 Komponenten an der selben Stelle) und deswegen wollte ich mit der Glasspane den Button halt explizit an diese Stelle setzen.. Das Gui selbst hab ich auf setResizable(false); gesetzt, damit sollte das Problem je geklärt sein oder?

Wie kann ich denn absolut sicher sein, dass meine Komponente 100% "sichtbar" positioniert ist. Wäre das mit setLocation(1,1) machbar?
 
Sollen die Buttons über dem Text sein? Mit JEditorPane sollte man auch Buttons in den Text einbetten können.

100%ige Sicherheit gibt's nirgens ;-) Grundlegend ist, dass die Komponenten auch tatsächtlich im Container enthalten sind.
 
Glasspane ist hier der falsche Ansatz. Man sollte Glasspane gar nicht anfassen, außer man weis genau was man macht. Für Überlagerungen ist JLayeredPane zuständig, welches auch in einem JFrame vorhanden ist. JLayeredPane kann Komponenten stapeln und hat eine Z-Index Angabe. Hier die Beschreibung:

How to Use Layered Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Doch in diesem Fall würde ich JXLayer empfehlen:

https://jxlayer.dev.java.net/

man kann es als Weiterentwicklung von JLayeredPane ansehen, wird in Java 7 standardmäßig enthalten sein. Damit kannst Du eine neue Komponente bauen, welche die JTextArea und deine Buttons enthält, unabhängig von einem JFrame.

Slawa
 

Zurück
Oben