2009-10-03 15 views

Antwort

7

Die kurze Antwort ist ja, wie ein JLabel ein Container ist, so kann es eine Component (a JLabel ist eine Unterklasse von Component) akzeptiert in die JLabel unter Verwendung der add Methode hinzufügen:

JLabel outsideLabel = new JLabel("Hello"); 
JLabel insideLabel = new JLabel("World"); 
outsideLabel.add(insideLabel); 

Im obigen Code wird insideLabel zu outsideLabel hinzugefügt.

Es erscheint jedoch visuell ein Etikett mit dem Text "Hallo", so dass man das Etikett, das in dem Etikett enthalten ist, nicht wirklich sehen kann.

Es stellt sich also die Frage, was man wirklich erreichen möchte, indem man ein Etikett auf ein anderes Etikett setzt.


Edit:

Aus den Kommentaren:

gut, was ich wollte zuerst tun war, einen gewissen Anteil aus einer Datei zu lesen, anzuzeigen dann diese Fraktion in a jlabel. Was ich dachte, war teilen Sie die Fraktion in 3 Teile, dann verwenden Sie ein Etikett für jeden der drei. dann zweite, ich möchte in der Lage sein, den Bruch zu ziehen, so dachte ich, ich könnte ein anderes jlabel verwenden, und legen Sie die 3'mini jlabels über den großen jlabel. Ich weiß nicht , ob das funktionieren wird ..: |

Es hört sich an, als ob man sich überlegen sollte, wie man Layout-Manager in Java benutzt.

Ein guter Startpunkt wäre Using Layout Managers und A Visual Guide to Layout Managers, beide von The Java Tutorials.

Es klingt wie ein GridLayout könnte eine Option sein, um die Aufgabe zu erfüllen.

JPanel p = new JPanel(new GridLayout(0, 1)); 
p.add(new JLabel("One")); 
p.add(new JLabel("Two")); 
p.add(new JLabel("Three")); 

Im obigen Beispiel wird die JPanel wird ein GridLayout als Layout-Manager zu verwenden, und erzählt wird, eine Reihe von JLabel s zu machen.

+0

oh. Cool, danke! Ich bin nicht wirklich mit diesen vertraut, also fragte ich hier. :) – annaoj

+0

Nun, was ich wollte, war zuerst, lesen Sie einen bestimmten Bruchteil von einer Datei, dann zeigen Sie diesen Bruchteil in einem jlabel an. Was ich dachte, war, die Fraktion in 3 Teile zu teilen, dann ein Etikett für jeden der drei zu verwenden. dann möchte ich zweitens den bruch ziehen können, also dachte ich, ich könnte ein anderes jabel benutzen und die 3'mini jlabels über das große jabel legen. Ich weiß nicht, ob das funktionieren wird ..: | – annaoj

+0

klingt wie das wird funktionieren..danke, covebird! :) – annaoj

0

ist es eine Frage des Layouts. können Sie das mit Null-Layout (mit fest codierten Standorten) oder mit einem benutzerdefinierten Layout tun.

+0

Ich habe versucht, dies zu tun, aber es funktioniert nicht für mich. : c Vielleicht mache ich etwas falsch. Ich werde es wieder versuchen. Danke Omry! – annaoj

+0

Sie können die Funktion list() verwenden, um einen schönen Dump der aktuellen Containerhierarchie zu erhalten, der Ihnen bei der Fehlersuche helfen soll. –

+0

großartig! Vielen Dank! Sollte ich wieder Probleme bekommen, kann ich es hier nochmal posten? – annaoj

1

Die Antwort auf Ihre ursprüngliche Frage ist ja aus den Gründen, dass eine Komponente zu einem Container hinzugefügt werden kann.

Der Grund, warum Sie das zweite Etikett nicht sehen, ist, weil ein JLabel standardmäßig einen Null-Layout-Manager verwendet und die Größe des zweiten Etiketts (0, 0) ist. Alles, was Sie tun müssen, ist, die Grenzen des zweiten Etiketts festzulegen und los geht's.

Sie können einen Layout-Manager nicht verwenden, wenn Sie Komponenten umherziehen möchten, da der Layout-Manager aufgerufen wird und die Komponenten basierend auf dem Layout-Manager der Komponente neu positioniert werden, sobald Sie den Rahmen ändern.

+0

oh. Aber ist es möglich, ein Etikett übereinander zu legen und beide Etiketten als eines zu ziehen? : | – annaoj

+0

Wenn der Maus-Listener zum übergeordneten Label hinzugefügt wird, werden auch alle untergeordneten Elemente beim Verschieben gezogen. – camickr

+0

oh..aber ein Freund sagte, dass es nicht möglich ist .. sagte, ich sollte ein Panel verwenden. Wah. jetzt bin ich verloren. : | – annaoj

0

können Sie einen JLayeredPane verwenden und den Rahmen auf No Border setzen.

+0

Es tut mir leid, das ist ein einfacher Weg, wenn Sie einen Designer verwenden! Wie der in Netbeans. –

0

können Sie sie mit Hilfe der horizontalen oder vertikalen Spalt (HGAP, VGAP) die Attribute des Layouts über jeweils anderen setzen hinzufügen
JPanel p = new JPanel(new GridLayout(2, 1,-40,0)); //the 40 is the hgap , make it the same with the label height .