Eigener Button ersetzt den vorherigen

DarkPhoenixX

Mitglied
Sehr geehrte User und Userinen

Ich hänge nun schon längere Zeit an einem Problem, wo ich an der Struktur von Java scheitere und ich keinen Rat mehr weiß.

Die angehängte Klasse funktioniert, bis auf, dass der erneute Aufruf der Klasse die alten überschreibt. Meine Frage ist, wie kann ich das verhinder, umgehen, etc.

So wird aufgerufen und der Button kann als Layer eingefügt werden. Klappt soweit.
GButtonB x = new GButtonB(*IMAGE*);


Der nächste erzeugte Button überschreibt die Grafik der anderen.

GButtonB x1 = new GButtonB(*IMAGE1*);
GButtonB x2 = new GButtonB(*IMAGE2*);
GButtonB x3 = new GButtonB(*IMAGE3*);

Alle Buttons sehen aus wie x3, also IMAGE3

Mann soll aber mit dieser Klasse unabhängige Button Vorlagen kreieren können.
Das hier hat nichts mehr mit Methoden zu tun, sondern mit der Struktur und dort scheitere ich.

Meine neue Klasse überschreibt die anderen. Was soll ich tun?


Ich hoffe hier kann mir geholfen werden.
DANKE




Quellcode:

import java.awt.*;
import java.awt.event.*;

public class GButtonB extends Component {

private static Image image;

boolean pressed = false;
ActionListener actionListener;
String actionCommand;

public GButtonB(Image image) {

this.image = image;
MediaTracker mt = new MediaTracker(this);
mt.addImage( image, 0 );
try {
mt.waitForAll();
} catch (InterruptedException e) { /* error */ };
setSize( image.getWidth(null), image.getHeight(null) );
enableEvents( AWTEvent.MOUSE_EVENT_MASK );
}


public void paint( Graphics g ) {
System.out.println("paint e" + e);

g.drawImage( image, 0, 0, this );
}

public Dimension getPreferredSize() {
return getSize();
}

public void processEvent( AWTEvent e ) {
if ( e.getID() == MouseEvent.MOUSE_PRESSED ) {
pressed = true;
repaint();
} else
if ( e.getID() == MouseEvent.MOUSE_RELEASED ) {
pressed = false;
repaint();
fireEvent();
}
super.processEvent(e);
}

public void setActionCommand( String actionCommand ) {
this.actionCommand = actionCommand;
}
public void addActionListener(ActionListener l) {
actionListener = AWTEventMulticaster.add(actionListener, l);
}
public void removeActionListener(ActionListener l) {
actionListener = AWTEventMulticaster.remove(actionListener, l);
}
private void fireEvent() {
if (actionListener != null) {
ActionEvent event = new ActionEvent( this,
ActionEvent.ACTION_PERFORMED, actionCommand );
actionListener.actionPerformed( event );
}
}
}
 
Benutze bitte die Code Tags wenn du hier postest.

Da dein Image in der Klasse static ist, ist das ja auch kein Wunder dass es überschrieben wird. Nochmal zur Erklärung von static: Dies bedeutet dass dieses Feld image für die KLASSE nur einmal existiert. Ohne static existiert das Feld pro Button einmal (das ist das was du willst).
 
Danke für die rasche Antwort. Es hat einwandfrei geklappt.
Jetzt verstehe ich auch besser den Sinn von static.

Vielen dank nochmal zeja


Wer nach einer einfachen Methode sucht custom Buttons anzulegen, darf sich bedienen.
Man sollte nur static entfernen:)
 
Zurück