Action aus dem ActionMap disablen

Alles zu NetBeans als RCP-Platform

Moderator: arittner

Action aus dem ActionMap disablen

Beitragvon mklische » 24.07.2010, 16:30

Hallo zusammen

Ich habe ein TopComponent die in einer Init-Methode welche aus dem Konstruktor aufgerufen wird mittels getActionMap().put() Actions in einer Toolbar hinterlegt. Ich habe z.B. in der Toolbar eine "Edit" Action hinterlegt, die je nach geöffneter TopComponent etwas anderes macht.

Nun habe ich 2 Probleme:

1.) Wenn ich die Applikation öffne sind die Toolbar-Buttons bereits "enabled" obwohl noch gar keine Action mit getActionMap().put(...) hinterlegt ist. Die Wirkung ist dann folgende: Wenn man den Button drückt in der Toolbar wird er einfach grau. Wie kann ich die von Anfang an "ausgeschaltet" machen?

2.) Wenn ich eine TopComponent öffne, mache ich wie gesagt quasi eine "Registrierung" der Implementation mittels getActionMap().put(...) und füge diese Edit-Action hinzu:
Code: Alles auswählen
editAction = new AbstractAction()
    {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        editAction(e);
      }
    };
getActionMap().put(EditAction.get(EditAction.class).getActionMapKey(), editAction);


Jetzt kommt es aber vor, dass ich die Action aufgrund von diversen Bedingungen in der TopComponent ausschalten will. Das klappt nicht: Ich habe wieder einen ähnlichen Effekt wie beim starten. Der Button in der Toolbar bleibt aktiviert und wenn man ihn klickt wird er einfach grau und es passiert nichts. Das wär ja okay, aber es wäre schöner, wenn sich der Button quasi "grau" machen würde, wenn ich die Action disable.

Wenn man nämlich die TopComponent wieder zumacht, dann macht er den Button schön grau, damit man ihn nicht mehr klicken kann. Genau dieses Verhalten hätte ich gerne. Ich gehe mal davon aus, dass er ja nicht "richen" kann, wenn ich eine Action disable (ich habe übrigens beides versucht... editAction.setEnabled(false); und getActionMap.remove(editAction); ... hat beides nichts gebracht bezgl. ausgrauen des Toolbar-Buttons).

Aber wen und wie muss ich informieren?
Für jeden Hinweis bin ich dankbar!
Viele Grüsse
Mike
mklische
 
Beiträge: 9
Registriert: 17.06.2010, 12:20

Re: Action aus dem ActionMap disablen

Beitragvon Olek77 » 25.07.2010, 20:01

Hi,

Kenne mich damit nicht so gut aus aber auf die Schnelle habe ich das hier gefunden
http://download.oracle.com/docs/cd/E174 ... ction.html

Gruß,

Olek
- Netbeans Certified Associate -
Benutzeravatar
Olek77
 
Beiträge: 130
Registriert: 21.03.2009, 15:09

Re: Action aus dem ActionMap disablen

Beitragvon arittner » 26.07.2010, 10:19

Moin!

Ich nutze die ActionMap eigentlich gar nicht. Aber wenn ich Kontext-Actions bastele und diese in der Toolbar registriere dann funktioniert immer ein setEnabled, wenn firePropertyChange dabei aufgerufen wird (was setEnabled von AbstractAction eigentlich tun sollte).

Prüf mal im Debugger, ob firePropertyChange für "enabled" überhaupt aufgerufen wird. Was nicht klappt, ist einfach nur die Logik in der überschriebenen isEnabled-Methode zu programmieren, weil sonst dabei niemand informiert wird.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2870
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen

Re: Action aus dem ActionMap disablen

Beitragvon arittner » 26.07.2010, 12:25

Moin!

Noch was. Wenn die Action von Anfang an disabled sein soll, muss im Constructor diese auch per setEnabled (false) deaktiviert werden. Actions sind nämlich per default enabled. Nehmen wir nun an, dass isEnabled trotzdem false zurückgibt (weil überschrieben und spezielle Logik), würde ein nachträgliches setEnabled nicht zu Erfolg führen, weil firePropertyChange keine Änderung erkennt (die Super-Klasse holt sich den boolean Wert enabled und vergleicht diesen mit der Änderung und würde nur bei einem Unterschied ein Event verschicken). Sind isEnabled und der boolean-Wert der Super-Klasse nicht synchron, gibt es Probleme.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2870
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen


Zurück zu NetBeans - Platform / RCP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast