Namen von Komponenten zur Laufzeit rauskriegen

RealHAZZARD

Erfahrenes Mitglied
Servus.

Wie es die Überschrift eigentlich schon verrät möchte ich zur Laufzeit den Namen von einer Koponente bekommen. In der hauptsache dreht es scih bei den Komponenten um Button, oder zumindest Kompos. die von Buttons abgeleitet sind.
getName gibt mir leider nur null wieder.

Hat jemand nen Plan?


THX
 
Hast Du den Namen vorher gesetzt oder kann es sein, dass Du getClass().getName() meinst?
 
THX für die schnelle Antwort.

Nein den Namen hab ich vorher nicht explizit gesetzt, aber ist das nicht der name den ich der Kompo. gebe, wenn ich sie aufrufe (constructor)?

getclass.getname gibt mir ja nur den namen der klasse aus.

Was ich such ist vielmehr sowas:
Code:
JButton _knopf=new JButton;
....so...und jetzt suche ich nach einer Methode die mir "_kopf" wiedergibt.
 
Hallo!

An diese Information heranzukommen ist nur moeglich, wenn die entsprechenden Componenten von Attributen (auf Instanz oder Klassenebene) Referenziert werden. Werden die Namen nur lokal verwendet ist die Ermittlung des Namens an den eine Komponente gebunden worden so gut wie unmoeglich...

Hier mal ein Beispiel wie ich das mit Instanz Attributen meine...:
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.lang.reflect.Field;

import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 * @author Tom
 * 
 */
public class ComponentIntrospectionExample extends JFrame {

    JLabel lblA, lblB, lblC;

    public ComponentIntrospectionExample() {
        super("ComponentIntrospectionExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new GridLayout(1, 3));

        lblA = new JLabel("A");
        lblA.setName("A");
        lblB = new JLabel("B");
        lblB.setName("B");
        lblC = new JLabel("C");
        lblC.setName("C");

        add(lblA);
        add(lblB);
        add(lblC);

        pack();
        setVisible(true);

        System.out.println(getFieldNameForComponentWithName(
                "B",
                getContentPane()));
    }

    private Object getFieldNameForComponentWithName(
            String componentName,
            Container parentContainer) {
        Component[] components = parentContainer.getComponents();
        for (int i = 0; i < components.length; i++) {
            Component component = components[i];
            if (componentName.equals(component.getName())) {
                Field[] fields = getClass().getDeclaredFields();
                for (int j = 0; j < fields.length; j++) {
                    Field field = fields[j];
                    field.setAccessible(true);
                    try {
                        if (field.get(this) == component) {
                            return field.getName();
                        }
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return null;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new ComponentIntrospectionExample();
    }

}
...dieses Beispiel vernachlaessigt die Tatsache, dass eine Komponente auch von mehreren Attributen referenziert werden kann. Weiterhin wird die Container Komponente nicht rekursiv nach subcontainern und deren Elemente durchsucht...

Gruss Tom
 
Dank dir. aber wie du selbst schon schreibst...das ist kompliziert...
und lohnt den Aufwand in meiner Sache nicht.

THX@all
 
Zurück