# Komponente im Applet bewegen - 2 Klassen



## Sindbad1983 (1. Okt 2004)

Hi!

Könnte mir bitte jemand helfen!?!  
Ich bin noch nicht so gut in Programmieren und habe deshalb einige Verständnisprobleme!

Ich möchte in einem Applet einen Kreis verschieben können..nämlich immer dann, wenn ich den Button betätige!
Also wenn ich auf den Button links drücke, soll sich der Kreis 50 nach links bewegen! 
Der Kreis wird dabei vom Hauptprogramm ZielscheibeBeweg aus Circle aufgerufen! Nur versteh ich jetzt nicht, wie man auf die Variablen einer anderen Klasse zugreifen kann..??!!

Hauptklasse: 


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

public class ZielscheibeBeweg extends JApplet implements ActionListener{

	Container c;
	JButton links;

	public void init(){
		c=getContentPane();
		c.setLayout(new BorderLayout());

		links=new JButton("Links verschieben");
		c.add(links,BorderLayout.WEST);
		links.addActionListener(this);

		Circle circle1=new Circle(250,140,50);//Aufruf aus Klasse Circle
		c.add(circle1);
	}

	public void actionPerformed(ActionEvent e){ //in dieser Methode liegt wohl der Fehler!??!

		if(e.getSource()==links){ //JButton links
			int xpoint,ypoint;
			xpoint.gehLinks();//Aufruf aus Klasse Circle
			ypoint=ypoint;
		}
	}
}
```


..und das ist die Klasse Circle:


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


class Circle extends JComponent{

			private int xpoint;
			private int ypoint;
			private int radius;
			int verschiebe=50;


			public Circle(int xpoint,int ypoint,int  radius){
				this.xpoint=xpoint;
				this.ypoint=ypoint;
				this.radius=radius;
				setBounds(xpoint,ypoint,radius,radius);
			}

			public void paint(Graphics g){
				g.fillOval(xpoint,ypoint,radius,radius);
			}

			public void setX(int xpoint){
				this.xpoint=xpoint;
			}

			public void setY(int ypoint){
				this.ypoint=ypoint;
			}

			public int getX(){
			    return xpoint;
			}

			public int getY(){
			    return ypoint;
			}

			public int gehLinks(int verschiebe){
				xpoint=getX();
				xpoint=xpoint-verschiebe; 
				return xpoint;
			}
	}
```


Ich hoffe, dass mir jemand helfen kann..wär echt dringend!

Vielen Dank im Voraus!
ciao,Tommy


----------



## Sky (1. Okt 2004)

```
public void actionPerformed(ActionEvent e){ //in dieser Methode liegt wohl der Fehler!??! 
   if(e.getSource()==links){ //JButton links 
      int xpoint,ypoint; 
      xpoint.gehLinks();//Aufruf aus Klasse Circle 
      ypoint=ypoint; 
      circle1.setX( xpoint ); // <-- NEU
      circle1.setY( ypoint ); // <-- NEU
   } 
}
```

Alternativ könnte die Methode * gehLinks * auch direkt die Koordinanten xpoint und ypoint in der Classe Cirle setzen:


```
public void gehLinks(int verschiebe) { // Rückgabewert geändert
   xpoint=getX(); 
   xpoint=xpoint-verschiebe; 
   this.setX( xpoint ); // <-- NEU
   this.setY( ypoint ); // <-- NEU
}
```


----------



## Sindbad1983 (1. Okt 2004)

Hi!


Vielen Dank für deine schnelle Antwort!
Ich bin dir echt sehr dankbar..aber leider funktioniert es noch nicht!

Wenn ich jetzt deine gehLinks-Methode übernehme, also:


```
public void gehLinks(int verschiebe) { // Rückgabewert geändert 
   xpoint=getX(); 
   xpoint=xpoint-verschiebe; 
   this.setX( xpoint ); // <-- NEU 
   this.setY( ypoint ); // <-- NEU 
}
```


..wie müsste dann meine actionPerformed-Method aussehn??

kann ich da nicht sagen?



```
public void actionPerformed(ActionEvent e){

		if(e.getSource()==links){ //nur mal für den linken Button...!
                                Circle circle1;
                                circle1.gehLinks();
                                }
}
```

oder geht das nicht?


Denn wenn ich MEINE gehLinks()-Methode verwende und deine actionPerformed, dann stimmt in deiner was nicht...


```
public void actionPerformed(ActionEvent e){ //in dieser Methode liegt wohl der Fehler!??! 
   if(e.getSource()==links){ //JButton links 
      int xpoint,ypoint; 
      xpoint.gehLinks();//   DIESE ZEILE MAG ER NICHT!!!!!!!!!!!!!!!!!!!!
      ypoint=ypoint; 
      circle1.setX( xpoint ); // <-- NEU 
      circle1.setY( ypoint ); // <-- NEU 
   } 
}
```
Verstehst was ich meine?
Wie könnt das aussehn?

Danke für deine Hilfe!
ciao,Tommy


----------



## Sky (1. Okt 2004)

```
public void actionPerformed(ActionEvent e){ //in dieser Methode liegt wohl der Fehler!??! 
   if(e.getSource()==links){ //JButton links 
      circle1.gehLinks(); //   <-- geändert
   } 
}
```


----------



## Sindbad1983 (1. Okt 2004)

Ja,das hab ich auch schon gehabt! 

Geht aber leider auch nicht! ;-(
Der Kreis bewegt sich keinen Millimeter!
Schade!
Trotzdem danke für deine Hilfe!
ciao


----------



## Sindbad1983 (1. Okt 2004)

Oder kennst du den Fehler?
Ich würds so gern hinkriegen!


----------



## L-ectron-X (1. Okt 2004)

Nachdem Du den Kreis verschoben hast, muss er noch mal neu gezeichnet werden.
versuche mal die beiden Methoden

```
validate();
```
und/oder

```
repaint();
```
Es kann auch nicht schaden, mit Einsatz von _System.out.println(...);_-Befehlen die Zustände von Variablen zu prüfen. Alternativ dazu kannst Du auch einen Debugger verwenden, der Dir die Inhalte von Variablen anzeigt.


----------



## Sindbad1983 (2. Okt 2004)

Jaaaaaaaaaaa!

Es funktioniert!
Mensch, du bist super!

repaint() gehört in die actionPerformed-Methode rein!

Super!!!

Vielen,vielen Dank
ciao,Tommy


----------

