Wie getLocation() in JPanel von JLabel wurde dynamisch Hinzugefügt?
Habe ich eine Reihe von JLabels dynamisch und haben Sie in ein JPanel mit dem folgenden code (der code sollte ausreichend sein, um das problem zu verstehen hoffe ich!).
JPanel textPanel = new JPanel();
map = new HashMap<Integer,JLabel>();
vec = new Vector<JLabel>();
for(int i = 0; i<getCount();i++){ //getCount() returns int
JLabel label = new JLabel(getItemText(i)); //getItemText() returns String
map.put(i, label);
vec.add(label);
textPanel.add(map.get(i));
}
Jetzt versuche ich, um auf den Speicherort dieser Aufkleber aber nichts bekommen, aber java.awt.Point[x=296,y=63]
für Sie, wenn Sie versuchen, auf Sie zuzugreifen über den folgenden code.
System.out.println("Component position [1]: " +
textPanel.getComponent(1).getLocationOnScreen());
Bekomme ich die gleiche position für alle Komponenten, nicht nur für das eine.
Auch (noch wichtiger) bekomme ich die position java.awt.Point[x=0,y=0]
für den folgenden code.
System.out.println("Position of Component 1: " + map.get(1).getLocation());
Ich vermute dies ist mit der Tatsache zu tun, dass die JLabels dynamisch erzeugt werden. Ich wirklich müssen Sie dynamisch erzeugt, aber, und auch wirklich müssen in der Lage sein, um Ihre Lage über getLocation()
.
Bitte Hilfe!!! Vielleicht gibt es einen anderen Weg, um Sie zu erstellen oder eine Möglichkeit zum Zugriff auf Ihren Standort(s) anders?
- "code sollte ausreichend sein, um das problem zu verstehen hoffe ich!" Ein SSCCE ist in der Regel genug, um zu erklären, ein problem. Oder zumindest zu kompilieren, ausführen und sehen das problem.
- aus Neugier, was für ein problem versuchst du zu lösen?
- Ich versuche, die Anzeige einer Reihe von Strings, so dass ich zugreifen kann die Lage jedes Wort ("token"). Das Wort Strings sind, was ich mit der
getItemText()
Methode. Letztlich will ich zeichnen konstituierenden Bäume oben auf den JLabels. Wenn jemand einen besseren Weg, bitte shoot 'em meinen Weg :). Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine Komponente erstellen, es hat eine Standard-Position (0, 0);
Hinzufügen einer Komponente ein panel ändert nichts an dieser Lage.
Nachdem Sie nun all die Etiketten auf der Platte, die Sie tun müssen:
Dieser ruft den layout-manager verwendet, der Jury, und jedes Etikett wird dann zugewiesen werden, einen geeigneten Ort auf der Grundlage der Regeln der layout-manager.
revalidate()
der übergeordneten Komponente zu, je nach UI-design.revalidate()
ing... @Alexey Ivanov: vielen Dank,validate()
ing diegetContentPane()
hat es endlich funktioniert. Dank, Sie haben mich gerettet Stunden Arbeit! Das nächste mal, @Andrew Thompson, erinnere ich mich zu geben, ein SSCCE. Versprechen :).Hier ist ein SSCCE.
Typische Ausgabe