Namensgebung von GUI-Komponenten

Bullitt

Mitglied
Hallo!
Hab ein Problem mit automatischer Namensgebung von unbenannten GUI-Komponenten.
Also erstmal:
Ich hab ne simple Oberfläche mit zwei JComboBoxen. Denen gebe ich im Quellcode mit der setName-Methode die Namen ComboBox_Hugo und ComboBox_Hugo2.
Das dumme ist, dass man dem Slider und den Up und Down Butons im PopUp so keine Namen geben kann, weil man da ja nicht drankommt. Also hab ich mir ne rekursive Methode geschrieben, die allen unbenannten Unterkomponenten, die überhaupt auf der Oberfläche sind, einen Namen gibt. Jeweils den Namen der Elternkomponente vorangestellt und dann die Klasse der zu benennenden Komp. mit einem / getrennt und noch einer Zählvariablen. Z.B.: "ComboBox_Hugo/BasicArrowButton_0" das ist der Button zum öffnen des PopUps (da klappts wunderbar).
Bei dem Slider des Popups bzw bei den up und Down Buttons bekomme ich aber bei BEIDEN ComboBoxen folgenden Namen:

"null.layeredPane/JPanel_0/WindowsComboBoxUI$WindowsComboPopup_0/JScrollPane_0/JScrollPane$ScrollBar_1/WindowsScrollBarUI$WindowsArrowButton_0"

Das seltsame ist, das da nicht mal der Name der zugehörigen ComboBox auftaucht. Hier ist mal der Code , der meine Komponenten benennt.
Das this.getComponents(c) holt sich übrigens alle Unterkomponenten einer Komponente. Und das cutClassName((comp[i].getClass()).toString()) schneidet bei getClass alles ab, was hinter dem letzten Punkt kommt, damit die Namen nicht so lang werden. Man übergibt der Methode einfach eine Komponenten, z.B. eine ComboBox oder auch einen ganzen Frame, ist egal, alle (Unter)-Komponenten die da sind und keinen Namen haben, bekommen einen.

Code:
    public void nameUnnamedComponents(Component c) {
        int compCount = 0;
        Collection coll = this.getComponents(c);
        Component[] comp = (Component[]) coll.toArray(new Component[0]);
        for (int i = 0; i < comp.length; i++) {
            if (comp[i].getName() == null) {
                String name = "";
                // Name des Elternelements
		if (comp[i].getParent() != null) {
                    name = name + ((comp[i].getParent()).getName());
                }
                // Name des aktuellen Elem. hinzufügen
		name =
                    name
                        + "/"
                        + cutClassName((comp[i].getClass()).toString())
                        + "_"
                        + compCount++;
                comp[i].setName(name);
                System.out.println("Name gesetzt: " + comp[i].getName());
            }
            nameUnnamedComponents(comp[i]);
        }
    }
Vielleicht kann man ja an der Methode was ändern. Ich wäre echt dankbar für Hilfe!
 

Neue Beiträge

Zurück