JLabel.setName() Methode

Javaman91

Bekanntes Mitglied
Hallo,

eine kurze Frage zum einem JLabel.

Ich habe ein JLabel Array und mit
Code:
.setText("...");
lasse ich am jeweiligen JLabel einen Text anzeigen.
Jetzt möchte ich aber jeden JLabel einen internen Namen vergeben der nicht angezeigt wird.

Das könnte ich folgendermaßen machen:

Java:
label[1].setText("test"); // Das ist der zu anzeigende Text
label[1].setName("field1"); // Das ist der Name des JLabel's, der aber nicht angezeigt wird.

Mit:
Code:
label[1].getName("field1");
kann ich anhand des Namens, das JLabel ansprechen und im source code verwenden.

Ist das so möglich?
 
Der erste Part sieht gut aus. Aber der Zugriff geht so natürlich nicht.

Der Getter getName() nimmt keinen Parameter. Wenn Du das JLabel mit dem Namen "field1" haben willst, dann musst du alle JLabels durchgehen um etwas wie if(getName().equals("field1")) zu prüfen.

Und da ist die Frage, ob Du den Namen so überhaupt setzen musst. Das kann Sinn machen, wenn Du die Instanzen der Controls nicht separat speichern willst. Denn dann kannst Du einfach alle Controls des Fensters prüfen, ob getName() eben field1 ist.

Wenn Du Instanzen aber bereits speicherst (das label[1] deutet darauf hin), dann speichere diese doch direkt in einer Art und Weise, dass Du über den Namen zugreifen kannst. Dazu kannst Du eine Map / HashMap verwenden, z.B. etwas wie:
Map<String, JLabel> labels = new HashMap<>();

Und die Label kannst Du dann zuweisen per labels.put("field1", label);

Und wenn Du ein spezifisches Label suchst, dann machst Du ein labels.get("field1")
 
Der erste Part sieht gut aus. Aber der Zugriff geht so natürlich nicht.
Das ist mir klar, ich wollte nur zeigen, das man so ein einzelnes JLabel aus dem Array abfragen könnte.

Zur Frage von mihe7, weil ich so im Code den einzelnen Felder des Arrays eine andere bedeutung geben kann und nicht immer umdenken muss, das der angezeigte Buchstabe bedeutet. Das macht die Sache für mich um vieles einfacher.

Danke für die Hilfe.
 
Du solltest Dir auf jeden Fall die Collections von Java ansehen um zu verstehen, was für Möglichkeiten Dir Java "out of the box" bietet.

Statt ein Array zu haben um in diesen dann nach dem Namen eines Elements zu suchen, solltest Du Dir tatsächlich HashMaps ansehen. Arrays sind meist eine schlechte Wahl, wenn es um dynamische Listen oder Sets geht.

Ein Tutorial findet sich z.B. unter:

aber das Netz ist natürlich voll mit Inhalten zu diesem Thema.
 
Zur Frage von mihe7, weil ich so im Code den einzelnen Felder des Arrays eine andere bedeutung geben kann und nicht immer umdenken muss, das der angezeigte Buchstabe bedeutet. Das macht die Sache für mich um vieles einfacher.
Ja, das hat mir jetzt @KonradN schon wegbeantwortet 😀 Kann höchstens noch etwas Code beisteuern:
Java:
private Map<String, JLabel> labels = new HashMap<>();

// und dann irgendwo im Code ein Label hinzufügen
labels.put("field1", field1Label);

// bzw. darauf zugreifen
JLabel label = labels.get("field1");
 

Neue Themen


Zurück
Oben