Was ist der Verwendungszweck der Namenseigenschaft von Swing-Komponenten? Wird es intern benutzt?
Hintergrund: Ein Kollege hat einen Internationalisierungsmechanismus implementiert, indem er den Schlüssel für die Textzeichenfolge in der Eigenschaft name gespeichert hat. Dann durchläuft er einfach alle Schwungelemente und erhält den Schlüssel in der Namenseigenschaft der Komponente gespeichert. Er argumentierte, dass die Namenseigenschaft anscheinend nicht verwendet wird und dass dies der einfachste Weg ist, dies zu tun.
Wird es intern verwendet?
Kurze Antwort: ja.
Längere Antwort: eher einfach zu überprüfen - einfach ein paar UI bauen und den Baum gehen. Oder sieh dir f.i. die SwingLabs-Demo (kann nicht widerstehen :-),
Die nächste Frage ist: Beeinträchtigt die interne Swing-Einstellung den Namen aus Anwendungsgründen?
Kurze Antwort: schwer zu sagen, höchstwahrscheinlich nicht
Längere Antwort: Die internen Einstellungen, die ich gesehen habe, werden wahrscheinlich nicht für Anwendungsanforderungen überschrieben, da sie tief in der Containerhierarchie verborgen sind. In der Tat, einige Frameworks wie f.i. SAF verwendet den Namen für die Ressourceninjektion (ähnlich wie Sie Ihren Kollegen beschreiben). Mein eigenes (nicht gepflegtes) FormBuilder-Framework wurde für Layout-Einschränkungen verwendet.
Die vage (gelesen: undefiniert) Definition der Namenseigenschaft ist sowohl ein Vorteil als auch eine Falle:
Name der Komponente aus javadoc "Stellen Sie den Namen der Komponente ein oder rufen Sie ihn ab. Dies kann nützlich sein, wenn Sie Text mit einer Komponente verknüpfen müssen, die keinen Text anzeigt.". Also ich denke, es ist in Ordnung, den Namen zu verwenden.
Sie können auch etwas in die Eigenschaften der Komponente einfügen.
Nach meiner Erfahrung habe ich noch nie Probleme bei der Festlegung des Namens einer Swing-Komponente festgestellt. Für "Blatt" Swing-Komponenten (die Sie direkt verwenden, wie JLabel
, JButton
, JMenu
...), name
bleibt immer null
von Swing.
Wie @kelopatra bereits erwähnt hat, können inneren Komponenten von "komplexen" Swing-Komponenten (zB JColorChooser
) Namen zugewiesen werden, aber Sie können auf diese inneren Komponenten im Allgemeinen nicht direkt zugreifen (außer durch den Komponentenhierarchie-Baum).
Gemäß der Verwendung der Eigenschaft name
wird es oft für die Ressourceninjektion (i18n) verwendet, kann aber auch sehr nützlich für die UI-Automatisierung sein (für Tests oder Demos), weil die meisten Roboter (zB FEST Swing) dies tun in der Lage sein, eine Komponente anhand des Namens zu finden, vorausgesetzt, dass Sie Ihren Komponenten eindeutige Namen zuweisen.
Tags und Links java swing properties