# Update von JPanel nach Buttonbetätigung



## Gast (18. Jan 2004)

Hallo
Ich hab ein Problem mit einem JPanel.
Ich möchte es mittels eines Buttons modifizieren können. (Dies ist nur ein Testprogramm).
Es wird angezeigt, dass die Komponenten im JPanel angefügt worden sind, jedoch werden sie nicht angezeigt - warum nicht?
Ich hoffe dass mir jemand helfen kann.
Danke im Voraus

Hier der Code meiner Testklasse:


```
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class Test extends JApplet implements ActionListener{
	
	JButton xxx = new JButton("xxx");
	JPanel main = new JPanel();
	JPanel but = new JPanel();
	JLabel info = new JLabel();
	int i=10;
	
	public void init(){
		
		setSize(300,300);
		getContentPane().setLayout(null);
		getContentPane().add(main);
		getContentPane().add(but);
		main.setBounds(0,0,300,200);
		main.setLayout(null);
		but.setBounds(0,200,300,100);
		main.setBackground(Color.black);
		but.setBackground(Color.blue);
		but.add(xxx);
		but.add(info);
						
		xxx.addActionListener(this);
		
		
		
	}
	
	public void actionPerformed(ActionEvent e){
		DrawablePoint xxx = new DrawablePoint(i,100);
		xxx.setLocation(i,100);
		main.add(xxx);
		info.setText(Integer.toString(i)+" "+Integer.toString(main.getComponentCount())+" "+Integer.toString(main.getComponent(0).getX())); // Zeigt aktuellen Wert von i, Anzahl der in main eingefügten komponenten, x-koordinate des ersten Punktes
		i+=10;
		repaint();
	}
}
```

und hier noch der Code vom "DrawablePoint":


```
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

public class DrawablePoint extends JComponent{

	double x;
	double y;

	public DrawablePoint(double x, double y){
		this.x=x;
		this.y=y;
	}
	
	public double getXCoord(){
		return x;
	}
	
	public double getYCoord(){
		return y;
	}
	
	public void update(double x, double y){
		this.x=x;
		this.y=y;
	}
	
	protected void paintComponent(Graphics g){
		Graphics2D g2 = (Graphics2D)g;
		g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON);
		
		Ellipse2D.Double point = new Ellipse2D.Double(x,y,3.0,3.0);
		
		g2.setColor(Color.white);
		g2.fill(point);
		this.setBounds(getRootPane().getBounds());
	}
}
```


----------



## gustav (21. Jan 2004)

Ich habe die Erfahrung gemacht, das repaint() nicht immer funktioniert. Vielleicht habe ich aber auch das Prinzip noch nicht richtig verstanden und wende es falsch an. In solchen Situationen greife ich zu JPanel.updateUI(). 
Dies ist zwar kein sauberer Weg aber für meine Zwecke hat es bislang immer gelangt.

Aber vielleicht hilft es ja auch schon, wenn Du am LayoutManager rumspielst und diesen ein wenig auf die Füße trittst !


----------

