PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Swing Events


Gast
2006-07-09, 20:01:58
Hallo, habe ein Problem mit Swing Events.
Und zwar habe ich ein Feld mit Bildern gegeben, klickt man auf eins dieser Bilder, sorgt ein Event dafür, dass sich ein PopupMenü öffnet, bei dem man weitere Möglichkeiten auswählen kann, auch das wird mit einem Event gemacht.

Das Problem ist jetzt : In diesem zweiten Event gibt es keine Möglichkeit mehr, auf die Koordinaten des Feldes zuzugreifen, das diesen Event veranlasst hat (wäre notwendig um Bilder zu verändern).

Ich speichere jetzt die Koordinaten des angeklickten Bildes immer als static in der Klasse, darauf kann ich dann auch wieder zugreifen.
Dies ist aber sehr hässlich, gibt es ellegantere Lösungen ?

mithrandir
2006-07-09, 20:15:45
Normalerweise sollte jeder Event "wissen", in welcher Komponente er passiert ist, deshalb gibt's dafür auch die Methode getSource, siehe:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/EventObject.html#getSource()

Und wenn du das einem neu generierten Event mitgeben möchtest, gibt's auch eine Setter-Methode. Das müsste doch auch für deinen Fall funktionieren, oder?

Gast
2006-07-09, 20:26:42
ja, aber getSource liefert ein JMenuItem zurück, auf das halt gedrückt wurde.
Sry, wo ist die Setter Methode ?

Method Summary
Object getSource()
The object on which the Event initially occurred.
String toString()
Returns a String representation of this EventObject.

sehe ich nur...

mithrandir
2006-07-10, 07:40:12
Jo, sorry - java.awt.AWTEvent hat ne Setter-Methode ...

Gast
2006-07-10, 16:45:15
Das Problem ist aber, das ich im actionPerformed des PopupMenüs nicht mehr auf das angeklickte Feld des mouseclicked des Feldes habe.
Und ausserhalb des actionPerformed kann ich auch das ActionEvent dessen nicht verändern...

mithrandir
2006-07-10, 17:28:26
Naja, wenn du ein Popup-Menue selbst implementierst, leitest du das ja von JPopupMenu ab, oder? Dann kannst du ja einfach einen Konstruktor basteln, wo du die Komponente mitgibst. Warum postest du nicht einfach deinen Code, damit man sich mehr darunter vorstellen kann?

public class SomePopupMenu extends JPopupMenu
{
JComponent someComponent = null;

public SomePopupMenu( JComponent someComponent )
{
this.someComponent = someComponent;
// ...
}
}

// Und im Popup-Listener wird's dann ja eh instanziert:
public class SomePopupListener extends MouseAdapter
{
// ...

public void mouseReleased( MouseEvent e )
{
if ( e.isPopupTrigger() )
{
popup = new SwingPopupMenu( e.getComponent() );
popup.show( e.getComponent(), e.getX(), e.getY() );
}
}
}

// Und bei Events aus dem PopupMenu kannst du die Komponente ja wieder mitgeben, oder?

Gast
2006-07-10, 18:55:53
k, hab's verstanden :-)
thx!