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 );
}
}
}
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 );
}
}
}