Guten Tag,
Ich würde gerne für ein [JAPI]AbstractAction[/JAPI]-Object ein ‘mouse hover’ Icon setzen.
Das sich das Item also ändert, wenn die Maus über der Komponente ist, welche das [JAPI]Action[/JAPI]-Object darstellt.
Wenn du den Inhalt deiner Komponente selbst zeichnest, kannst du in der überschriebenen Methode paintComponent() mit getModel().isRollover() feststellen, ob sich der Mousecursor über deiner Komponente befindet.
Unter der Annahme, dass du über Swing, genauer über einen JButton redest.
Die Action kann ja in diversen Komponenten dargestellt werden.
Also ist sowas nicht möglich:
this.putValue(NAME, "Txt");
this.putValue(AbstractAction.SMALL_ICON, CONTROL_START);
this.putValue(AbstractAction.SMALL_HOVER_ICON, CONTROL_START); // natcho, gibt es nicht
Nun, das ist schade. Da es sich dabei ja nicht um eine ‘Überlebens-wichtige’-Funktion handelt, werde ich es dann einfach weg lassen.
public static final String ACTION_ICON_ROLLOVER = "ACTION_ROLLOVER_ICON_KEY";
public static JMenuItem getJItem(Action e) {
JMenuItem item = new JMenuItem(e);
item.setRolloverEnabled(true);
item.setRolloverIcon((Icon) e.getValue(ACTION_ICON_ROLLOVER));
return item;
}```
class _Action_ extends AbstractAction:
``` public _Action_() {
this.putValue(SMALL_ICON, CONTROL_START);
this.putValue(Utils.ACTION_ICON_ROLLOVER, CONTROL_START_HOVER);
}```
Und um das ganze zusammenzufügen:
``` menu.add(Utils.getJItem(new _Action_()));```
Leider scheint es nicht zufunktionieren?
Das Rollover-Icon wird nicht gezeigt.
Viele grüße ,
von mir
In der Form macht die Erweiterung der AbstractAction - meine Meinung - keinen Sinn. Welchen Vorteil soll das bieten? Sinnvoll wäre es auch den selben Schlüssel zu nehmen: e.getValue(Utils.ACTION_ICON_ROLLOVER)
Ich erweitre um actionPerformed(ActionEvent) zu überschreiben.
Wie sollte ich den ein AbstractAction-Object verwenden, ohne davon zu erben?
(Den selben key benutze ich, ein schnelles trace hat auch ergeben, dass das Icon beim ‘rausfischen’ über e.getValue(Utils.ACTION_ICON_ROLLOVER) das ist was es sein soll und nicht etwa null).
Aber der Link von ‘Unregistered’ hilft weiter, auch wenn das natürlich wider super ist…
[QUOTE=von mir;84466]Ich erweitre um actionPerformed(ActionEvent) zu überschreiben.
Wie sollte ich den ein AbstractAction-Object verwenden, ohne davon zu erben?[/QUOTE]
ohne Überschreiben geht ja nicht. Mir ging es um die Art wie.
Sinnvoller wäre etwas in der Art:
public final static String ROLLOVER_ICON = "IconToShowOnRollover";
public RollOverAction(String name, Icon small, Icon rollover) {
super(name, small);
putValue(ROLLOVER_ICON, rollover);
}
public void actionPerformed(ActionEvent e) {
...
}
}```
Aber da das ohnehin nicht für MenuItems funktioniert, bleibt wohl nichts anderes übrig als den Rollover Effekt selbst via MouseListener zu implementieren.