mehrere JLabel sortieren

  • Themenstarter Themenstarter DanielXY
  • Beginndatum Beginndatum
D

DanielXY

Gast
Hi,

habe da mal eine Frage. Ich hab in einem JPanel insgesamt 11 JLabel nebeneinander liegen. Möchte gerne die Anordnung der JLabels verändern. Schön wäre es auch wenn der Benutze per Drag&Drop die Anordnung verändern kann?
So erstelle ich die Labels:
Java:
JPanel ThePanel = new JPanel(new GridLayout(1,4));
ThePanel.setSize(985,125);
ThePanel.add(Label1);
ThePanel.add(Label2);
ThePanel.add(Label3);
// ...
ThePanel.add(Label11);
Es werden immer nur 11 JLabels angezeigt.

Hat jemand eine Idee wie ich das am einfachsten anstellen kann? Meine Idee ist es die JLabels mit setLocation zu setzen, aber da muss ich jede Position manuell setzen. Jetzt werden alle JLabels beim hinzufügen schön nebeneinander angezeigt.

Vielen dank für Hilfe 🙂

MfG Daniel
 
Wie du bei einem GridLayout mit 1x4 auf 11 kommst, ist mir gerade nicht klar, aber... eine Möglichkeit wäre, die Labels zu sortieren, und dann in sortierter Reihenfolge zu einem GridLayout(1,11) hinzuzufügen... Wenn sie nachträglich sortiert werden sollen, kann man sie mit panel.removeAll() entfernen und dann neu hinzufügen. Allerdings ist die Absicht, JLabels sortieren zu wollen, IMHO ziemlich :autsch: seltsam: Vermutlich sollte eher das sortiert werden, was in den Labels angezeigt wird.... Also die Reihenfolge der Labels könnte vermutlich gleich bleiben, und es sollten sich nur ihre Inhalte (Texte) ändern... ?!
 
Hi,

danke für deine Antwort, hat mir schon was geholfen 🙂.
habe beim absenden gesehen dass dort 1,4 steht. Leider nicht beabsichtigt, habe natürlich 1,11. Hintergrund ist, in den JLabels ist eine Zahl enthalten. Die Inhalte werden zufällig erzeugt, d.h. es können solche Labels vorkommen: 2,2,4,4,8,1,12,11,0,9,3. Die Zahlen werden auch angezeigt. Aber halt durcheinander. Wenn der Benutzer nun dieses durcheinander nicht mag möchte ich dem die Möglichkeit geben die Labels zu sortieren. Die Möglichkeit alle aufsteigend zu sortieren kann ich nun lösen wenn ich alle entferne und neu aufsetze, denn nachdem erstellen weiß ich ja welche Labels mit welchen Werten vorhanden sind. Das klingt gut.
Gibts eine Möglichkeit das verschieben eines Labels per Drag&Drop zu machen? Z. B. möchte ein Benutzer das Label mit der 11 nach vorne hinter die 2 schieben?
 
Das mit dem "Drag&Drop" ist nicht so trivial... also, man kann mal schauen ob man den passenden Codeschnipsel dafür findet (müßte ich jetzt aber auch erst Websuchen). Eine Alternative wäre vielleicht(!), eine JList zu verwenden - damit könnte(!) das D&D etwas einfacher sein, weil die die "Grundfunktionalität" dafür schon mitbringt.
 
Die Möglichkeit alle aufsteigend zu sortieren kann ich nun lösen wenn ich alle entferne und neu aufsetze
Ich würde zunächst mal GUI und Daten trennen. Für die Werte würde ich ein Model - basierend auf einer einfachen Liste oder Array - erstellen. Und die Labels zeigen, dann die Werte der einzelnen Positionen der Liste. Die Liste im Model kann man dann relativ einfach sortieren und danach nur die Inhalte der Labels aktualisieren anstelle das ganze Layout umzuwurschtln. Zu D&D kann ich so spontan nichts beitragen.
 
Hi,

danke für eure Antworten.
Die Labels habe ich alle in einer Hashmap, nur diese die angezeigt werden. Der Benutzer kann auch ein Label entfernen/hinzufügen, wie er es gerne möchte. Ich glaube eine Liste ist einfacher zu sortieren las eine Hashmap oder? Außer ich würde die in eine Neue Liste sortiert aufnehmen??

Richtig, ich möchte den Inhalt der Labels sortieren. Allerdings hat jedes Label als Inhalt eine Zahl. Macht es da keinen Sinn die Labels zu sortieren? Oder meinst du mit Inhalt sortieren, dass ich am besten den Inhalt von Label 1-11 verändere und Labels so stehen bleiben wie sie stehen? Das würde funktionieren, aber mit dem D&D bin ich leider noch nicht weiter 🙁

MfG
Daniel
 
Naja nochmal: JLabels sind GUI-Komponenten. Die verwendet man, um Dinge anzuzeigen, aber nicht um Daten zu speichern. Wenn du diese Zahlen in einer Liste speichern und sortieren willst, dass speichere die Daten in einer List (ArrayList oder so) und sortiere die dann. (Um die dann anzuzeigen, kannst du sie in Labels oder sonstwohin packen, aber die haben nichts mit den Daten zu tun).

Zum DnD: Da wirst du erstmal ein bißchen dazu Lesen oder passende Beispiele suchen müssen (z.B. auf java2s.com), und ggf. konkreter nachfragen.
 
Das ist mir schon klar, dass die JLabels nur zur Anzeige gedacht sind. Es sind ja auch nur ausgaben, die dem Benutzer angezeigt werden. Ich möchte halt nur dem Benutzer ermöglichen selbst zu entscheiden ob er die Lables aufsteigend sortieren möchte, oder selbst eine Sortierreihenfolge wählt. Dazu habe ich die JLabels in einer Hashmap<String, JLabel>, wodurch die erstellt werden. Die Labels werden an einem JPanel angefügt. Dort ist nichts weiter drin als diese 11 Labels. Ich habe leider noch nie etwas mit DnD in JAVA gemacht, hätte gedacht man kann die JLabels innerhalb eines Panels versetzen. Habe natürlich schon im Netz gesucht bevor ich dieses Thema aufgemacht habe, aber ohne Erfolg. Ich such mal weiter. Vielleicht hat ja irgendwo irgendjemand anders schonmal solch ein Problem gehabt 😀
 
Hallo,

ich hab grad nicht die Muße mich da nochmal reinzudenken, aber in folgendem "Projekt" hab ich sowas ähnliches schonmal benutzt. Es ist wohl ziemlich schlampig, aber vielleicht schaffst du es, dir da das entsprechende rauszusuchen.

Die Klassen DragBox.java und BildTH.java sollten für dich interessant sein.

Verlegenen Gruß vom N.
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben