2009-10-03 6 views

Odpowiedz

7

Krótka odpowiedź brzmi tak, jak JLabel jest Container, więc może przyjąć Component (a JLabel jest podklasą Component), aby dodać do JLabel za pomocą metody add:

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

W powyższym kodzie insideLabel jest dodawany do outsideLabel.

Jednak wizualnie pojawia się etykieta z tekstem "Witaj", więc naprawdę nie można zobaczyć etykiety zawartej w etykiecie.

W związku z tym pojawia się pytanie, co tak naprawdę chce osiągnąć, dodając etykietę do innej etykiety.


Edit:

Z uwag:

dobrze, co chciałem zrobić, to po pierwsze, odczytać pewną frakcję z pliku, następnie wyświetlić tę frakcję w JLAbel . to, co myślałem, to podzielić frakcję na 3 części, a następnie użyć etykiety dla każdej z trzech. następnie drugi, chcę móc przeciągnąć ułamek, więc pomyślałem, że mogę użyć inny jlabel, i umieścić 3'mini jlabels "nad wielkim jlabel. Nie wiem, czy to zadziała ..: |

Wygląda na to, że należy zajrzeć do tego, jak używać menedżerów układów w Javie.

Dobrym miejscem na rozpoczęcie będzie Using Layout Managers i A Visual Guide to Layout Managers, oba od The Java Tutorials.

Wygląda na to, że jedną z opcji wykonania zadania może być GridLayout.

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

W powyższym przykładzie, JPanel jest użycie GridLayout jako kierownik układ, i dowiaduje się, aby rzędem JLabel s.

+0

oh. fajne dzięki! Nie bardzo im to znane, więc zapytałem tutaj. :) – annaoj

+0

cóż, chciałem zrobić najpierw, przeczytać pewną część z pliku, a następnie wyświetlić tę część w jlabel. Pomyślałem, że podzielić frakcję na 3 części, a następnie użyć etykiety dla każdej z trzech części. potem drugi, chcę móc przeciągnąć ułamek, więc pomyślałem, że mogę użyć innego jlabla i umieścić 3'miniowe etykietki nad wielkim jablonem. nie wiem, czy to zadziała chociaż ...: | – annaoj

+0

brzmi jak to zadziała..dzięki, coobird! :) – annaoj

0

to kwestia układu. można to zrobić za pomocą układu zerowego (z lokalizacjami zakodowanymi) lub z niestandardowym układem.

+0

Próbowałem to zrobić, ale to nie działa dla mnie. : c może robię coś nie tak. spróbuję ponownie. dzięki Omry! – annaoj

+0

można użyć funkcji list(), aby uzyskać ładną zrzut obecnej hierarchii kontenerów, powinno pomóc w debugowaniu problemu. –

+0

świetnie! dzięki! czy powinienem znowu spotkać się z problemami, czy mogę go tutaj ponownie opublikować? – annaoj

1

Odpowiedź na oryginalne pytanie brzmi "tak" z powodów, dla których każdy składnik można dodać do kontenera.

Powód, dla którego nie widzisz drugiej etykiety, polega na tym, że domyślnie JLabel używa pustego menedżera układu, a rozmiar drugiej etykiety to (0, 0), więc nie ma niczego do malowania. Wszystko, co musisz zrobić, to ustawić granice drugiej etykiety i odejść.

Nie można użyć menedżera układu, jeśli chcesz przeciągnąć komponenty, ponieważ zaraz po zmianie rozmiaru ramki itp. Menedżer układu zostanie wywołany, a składniki zostaną przeniesione na podstawie menedżera układu komponentu.

+0

oh. ale czy możliwe jest umieszczenie etykiety na drugiej i czy można przeciągnąć obie etykiety jako jedną? : | – annaoj

+0

Jeśli detektor myszy zostanie dodany do etykiety nadrzędnej, wówczas wszystkie dzieci również zostaną przeciągnięte po przeniesieniu. – camickr

+0

oh .. ale znajomy powiedział, że to niemożliwe .. powiedziałem, że powinienem użyć panelu. wah. teraz jestem zagubiony. : | – annaoj

0

Możesz użyć JLayeredPane i ustawić granicę bez ramki.

+0

Przykro mi, to prosty sposób, jeśli używasz projektanta! Jak ten w Netbeans. –

0

można dodać je nad każdym innym za pomocą różnic w poziomie lub w pionie (hgap, vgap) atrybutów układ
JPanel p = new JPanel(new GridLayout(2, 1,-40,0)); //the 40 is the hgap , make it the same with the label height .