# Button erscheint (nicht)



## joergh (29. Nov 2007)

Hallo!

Ich hab ein problem, das bestimmt auch schon andere hatten.
Ich erzeuge einen Button, der aber erst erscheint, wenn ich mit der Maus auf die Position gehe, auf der er liegt. Ab dann bleibt er sichtbar.
Woran liegt das?

Gruß
JÖRG


----------



## The_S (29. Nov 2007)

Zeig mal Code. Kann mehrere Ursachen haben, z. B. wenn du AWT und Swing mischst, oder wenn der Container schon sichtbar ist, wenn du den Button hinzufügst und nicht wieder validierst.


----------



## joergh (29. Nov 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Zeig mal Code. Kann mehrere Ursachen haben, z. B. wenn du AWT und Swing mischst, oder wenn der Container schon sichtbar ist, wenn du den Button hinzufügst und nicht wieder validierst.




```
public class KonstantenWertEditieren extends JFrame{
	
	Container c = getContentPane();
	
	JButton okButton;
	JComboBox modellBox, inportBox;
	JTextField tf;
	
	JButton okButton1, okButton2;
	
	public KonstantenWertEditieren(){
		super("Konstanten Wert editieren");
		
		setSize(500,200);
		
		c.setLayout(null);
	

		
		modellBox = new JComboBox();
		modellBox.setBounds(30, 50, 100, 30);
		c.add(modellBox);
		
	//Werte für modellBox zuweisen
		
		okButton = new JButton("OK");
		okButton.setBounds(150, 50, 70, 30);
		ModellOK mo = new ModellOK();
		okButton.addActionListener(mo);
		c.add(okButton);
		

	}
	
	private class ModellOK implements ActionListener{
		public void actionPerformed(ActionEvent a){
			
			inportBox = new JComboBox();
			inportBox.setBounds(150, 50, 100, 30);
			

			modellBox.setEnabled(false);
			okButton.setVisible(false);
			c.add(inportBox);
			
			okButton1 = new JButton("OK");
			okButton1.setBounds(270, 50, 70, 30);
			ModellOK2 mo = new ModellOK2();
			okButton1.addActionListener(mo);
			c.add(okButton1);
					
		}
	}
...
```

Button okButton1 erscheint halt nicht auf Anhieb.


----------



## L-ectron-X (29. Nov 2007)

Wenn du zur Laufzeit Komponenten auf deiner GUI befestigst, musst du anschließend ein Neuzeichnen anfordern.

```
c.add(okButton1);
validate();
```


----------



## joergh (29. Nov 2007)

... das löst mein Problem leider nicht!


----------



## SlaterB (29. Nov 2007)

validate();
            repaint();

bzw. nur 

repaint();

da du null-Layout verwendest


----------



## joergh (29. Nov 2007)

SlaterB hat gesagt.:
			
		

> validate();
> repaint();
> 
> bzw. nur
> ...



Jawoll! Vielen Dank Euch allen!


----------



## lhein (29. Nov 2007)

Es wundert mich schon, daß bei diesem Murks-Code überhaupt was passiert. 
Warum zum Henker verwendet jemand ein NULL Layout?
Nimm einen einfachen Layoutmanager, damit machst Du Dir selbst das Leben einfacher, oder noch besser, verwende einen grafischen GUI Designer, wenn Du mit den Layouts nicht klar kommst.

Eine andere Sache ist das dynamische Zufügen und Wegnehmen von Komponenten einer GUI. Sowas ist 
in den meisten Fällen mit Problemen verbunden und kann umgangen werden, indem man alle Komponenten von 
Anfang an erzeugt und eben nur dann sichtbar macht, wenn man sie braucht.

lr


----------



## Jodel85 (4. Dez 2007)

Ich habe selbiges Problem, verwende auch NULL-Layout. Aber wenn ich validate() und repaint() mache passiert immer noch das gleiche wie davor.
Ich habe ein Frame auf dem ein Panel ist und auf diesem sollen sich nun dynamisch JButtons und JComboBoxes hinzugefügt und gelöscht werden, auch soll der Inhalt von beiden des öfteren wechseln, von daher bietet sich meines erachtens nicht die Lösung von LR an alles schon am Anfang zu erzeugen.
Kann mir jemand Tipps geben?

Danke!


----------

