Domanda

Che cos'è java.awt.Component.getName () utilizzato per? Sembra sempre essere null nelle applicazioni che creo con NetBeans. Sto pensando di archiviare un po 'di testo di aiuto per componente - Non voglio usare il tooltip, ho un altro pannello in cui mostrerò il testo di aiuto.

È stato utile?

Soluzione

Component.setName (..) viene utilizzato in JDK principalmente dalle classi di implementazione look and feel per impostare stringhe simili a ID per ciascun componente, ad es. BasicOptionPaneUI potrebbe chiamarlo su un componente pulsante per impostarne il nome su " OptionPane.button " ;.

getName () viene utilizzato nei metodi toString (), quando si impostano i nomi dei componenti figlio all'interno di un componente composito / padre e nel codice di registrazione di debug di AWT e Swing. Sospetto fortemente che il metodo getName () sia utilizzato anche da alcuni framework di test AWT / Swing.

Quindi, se non dipendi da nessuno degli usi sopra di getName (), potresti provare a usarlo per i tuoi messaggi di aiuto, anche se non lo consiglierei.

Forse dovresti riconsiderare il tuo design? Utilizzare il nome per eseguire una ricerca in una hashmap che carica il testo della guida da un pacchetto di risorse?

Altri suggerimenti

Non l'ho visto usato per nulla dal framework. È utile se i componenti vengono passati a un metodo in modo da poter chiedere il loro nome per decidere come gestirli. Inoltre, molti framework di test dell'interfaccia utente lo utilizzano per consentire di fare riferimento ai componenti per nome negli script di test. Tuttavia, non vedo alcun motivo per cui non è possibile utilizzarlo per il testo di aiuto.

FEST utilizza il nome di un Componente per identificarlo nelle prove.

Il metodo component.getName () viene utilizzato principalmente con i listener. Se imposti il ??nome di un componente ( component.setName (name) ) puoi chiamare quel componente specifico da un metodo di Listener .

Esempio:

public void someMethodOfsomeListener(SomeEvent e){
   if (e.getComponent().getName().equals(component.getName())
      //do stuff...
}

Tieni presente che devi impostare esplicitamente il nome del componente, altrimenti restituirà null .

La risposta di Herman Lintvelt è stata quella corretta per la mia app.

Ho creato un pacchetto di risorse denominato HelpText.properties. Contiene coppie nome = valore. Ho impostato Nome () d ciascuno dei miei componenti con il "nome" " dalla coppia nome = valore. Ho quindi usato un frame getGlassPane () per catturare tutti i movimenti del mouse. Quando un mouse passa su un componente denominato, cerca il nome nel pacchetto, visualizza la guida se disponibile e inoltra il movimento del mouse al componente effettivo.

Accidenti. Solo 2 giorni di tempo per pensare. Finalmente sto iniziando ad abituarmi a Java :)

Inoltre, poiché penso che java.awt.Component sia un oggetto pesante in X, programmi come xwininfo e xwd potrebbero consentire di specificarlo per nome.

L'ho appena provato con un JFrame e setName non ha impostato il nome della finestra, la finestra è stata nominata dalla stringa che ho passato nel costruttore. Ma non ho nessun codice di esempio con cui testare, quindi potrei sbagliarmi su quello che ho scritto sopra.

Lo uso per gestire gli ascoltatori in una singola classe a parte. Ricevo come parametro il componente che contiene il mio object.addListener non come un contenitore ma come la classe che contiene quell'oggetto. Grazie Vivavinyl per la punta della prima impostazione del nome. È stato utile e ha funzionato.

Questo è ciò che uso getName () per:

    Frame[] frames = JFrame.getFrames();

    for (int i = 0; i < frames.length; ++i) {

        //get the frame
        Frame frame = frames[i];

        if (frame.getName().equals(frameName)) {

            //make the frame visible
            frame.setVisible(true);

            //focus the frame
            frame.requestFocus();

            //found
            return;

        }

    }

Ho cercato molte risposte per ottenere il nome e penso che questa sia l'unica soluzione facile

public static void main(String[] args) {
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            String name = actionEvent.getSource().toString();
            UserReaction(ObjectName.getComponentVariableName(name), "null");
        }
    };
    Button calculate_btn = new Button("Calculate");
    calculate_btn.setName("Calculate");
    calculate_btn.addActionListener(actionListener);
}

private static void UserReaction(String objectName) {
    if (objectName.equals("Calculate")) {
        //do something;         
    }
}static public String getComponentVariableName(String name) {
    String res = (name.substring(name.indexOf("[") + 1));
    res = res.split(",")[0];
    return res;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top