Wie lautet die Namenseigenschaft von Swing-Komponenten?

8

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.

    
mort 05.01.2012, 10:32
quelle

3 Antworten

3
  

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 :-),

  • Klicken Sie auf die JXTree-Demo-Aufgabe und sehen Sie sich die Namen einiger untergeordneter Elemente eines einfachen JFrames an, wie von Swing festgelegt (in der Baumstruktur, Klammer).
  • Ändern Sie die LAF zu Nimbus, klicken Sie auf die JXTreeTable-Demo-Aufgabe, bewegen Sie die Maus über die scrollBar der treeTable und sehen Sie den Namen der scrollBar-Buttons, wie vom LAF
  • festgelegt

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:

  • adv: Ja, jeder Code kann es verwenden, es hat keinen echten Vertrag
  • Falle: Möglicherweise gibt es viele konkurrierende Benutzer dieser Eigenschaft
kleopatra 06.01.2012, 11:45
quelle
8

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.

    
StanislavL 05.01.2012 10:39
quelle
2

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.

    
jfpoilpret 10.01.2012 15:37
quelle

Tags und Links