AbstractAction, mouse over icon

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.

Geht das? Und wenn ja mit welchem key?

Es wäre nett wenn mir das jemand sagen würde.

Viele grüße ,
von mir

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.

Ich habe keine Ahnung, worüber ich rede.

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.

Schönen Tag noch.

Meines Wissens ist das über die AbstractAction nicht möglich. Man muss explizit an der Komponente per setRolloverIcon das gewünschte Icon setzen.

Ich habe es jetzt so probiert:

class Utils:

    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)

Lies mal:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4776403
Toll…

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…

Viele grüße ,
von mir

[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.

Achso, ja. Das da oben war ja nur ein schnelles Beispiel.
Schönen Abend noch.

von mir