schwer zu beschreibendes problem (siehe code)

  • Themenstarter Themenstarter EinGast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

EinGast

Gast
also folgendes:

ich habe meine MenuBar in eine eigene Klasse ausgelagert. ich habe in der MenuBar ein paar Menüs mit etlichen MenuItems. manche dieser Items muss ich während der Laufzeit mal enablen und mal disablen, ich brauch also ne get-Methode für die Items.
da ich aer keine Lust habe 20 get-Methoden zu schreiben, ich aber weiss, wie die Items heißen, habe ich mir überlegt, den Namen als String zu übergeben, also etwa so:

Code:
private JMenuItem abcItem = new JMenuItem(new abcAction());
...
private JMenuItem xyzItem = new JMenuItem(new xyzAction());

public JMenuItem getItem(String name)
{
	return /*das Item, das so heißt wie der übergebene String name*/;
}

dass ich das dann quasi so aufrufen kann

Code:
MenuBar.getInstance().getItem(abcItem).setEnabled(false);

gibts da ne komfortable Möglicheit, oder komme ich nicht um ewig viel if-anweisungen oder ewig viele methoden herum?!
 
und wenn dus so machst?



Code:
    MenuElement[] path = MenuSelectionManager.defaultManager().getSelectedPath();
    
    if (path.length == 0) {
        // nichts gewaehlt    }
    
   
    for (int i=0; i<path.length; i++) {
        Component c = path[i].getComponent();
    
        if (c instanceof JMenuItem) {
            JMenuItem mi = (JMenuItem)c;
            String label = mi.getText();
                   }
    }

oder meintest du was anderes?

gruß math55
 
das mit dem HashTable sollte möglich sein. nur wirklich gekonnt habe ich auch nicht viel. wenn ich neue MenuItems hinzufüge, dann muss ich sie auch in den HashTable schreiben, was in etwa der gleiche Aufwand wie eine get-Methode ist. das wollte ich umgehen.

Ich hab mir gedacht, dass es vielleicht ne Möglichkeit gibt, dass man alle (private) Objekte durchgeht und guckt, wo der Name dem übergebenen String entspricht. vielleicht erweitere ich das in nem halben jahr nochmal um 10 MenuItems. der gedanke war, dass ich dann keine weiteren Methoden implementieren muss...

den codeschnipsel raff ich irgendwie net.

was steht denn in path[] nach der zeile hier?

Code:
MenuElement[] path = MenuSelectionManager.defaultManager().getSelectedPath();

aber unten das sieht doch schon annähernd brauchbar aus. ich würde meinen code jetzt so abändern:

Code:
private JMenuItem abcItem = new JMenuItem(new abcAction()); 
... 
private JMenuItem xyzItem = new JMenuItem(new xyzAction()); 

public JMenuItem getItem(String name) 
{ 
   if (name instanceof JMenuItem)
    return /*das JMenuIten*/; 
}

ich kann mir aba beim besten willen net vorstellen, dass das funzt...
 
wieso ist das mit der hashtable ein so großer Aufwand ?

Initalisieren musst du ja die MenuItems so und so (dann kannst du sie ja auch gleich danach in die Hashtable schreiben).

zum holen schreibst du einfach
Code:
public JMenuItem getItem(String name)  { 
    return (JMenuItem)menuItemHashTable.get(name);
}

Was anderes wäre deine durchlaufen durch alle privaten objekte ja auch nicht - nur dass dies wahrscheinlich effizienter programmiert wurde !

Du müsstest das ja dann auch nicht groß verändern wenn du neue MenuItems hinzufügen willst - du musst sie nur in die Hashtable schreiben...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben