Czy można dodać JLabel na innym JLabel? Dzięki.JLabel na innym JLabelu
Odpowiedz
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.
oh. fajne dzięki! Nie bardzo im to znane, więc zapytałem tutaj. :) – annaoj
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
brzmi jak to zadziała..dzięki, coobird! :) – annaoj
to kwestia układu. można to zrobić za pomocą układu zerowego (z lokalizacjami zakodowanymi) lub z niestandardowym układem.
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
można użyć funkcji list(), aby uzyskać ładną zrzut obecnej hierarchii kontenerów, powinno pomóc w debugowaniu problemu. –
świetnie! dzięki! czy powinienem znowu spotkać się z problemami, czy mogę go tutaj ponownie opublikować? – annaoj
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.
oh. ale czy możliwe jest umieszczenie etykiety na drugiej i czy można przeciągnąć obie etykiety jako jedną? : | – annaoj
Jeśli detektor myszy zostanie dodany do etykiety nadrzędnej, wówczas wszystkie dzieci również zostaną przeciągnięte po przeniesieniu. – camickr
oh .. ale znajomy powiedział, że to niemożliwe .. powiedziałem, że powinienem użyć panelu. wah. teraz jestem zagubiony. : | – annaoj
Możesz użyć JLayeredPane
i ustawić granicę bez ramki.
Przykro mi, to prosty sposób, jeśli używasz projektanta! Jak ten w Netbeans. –
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 .
przykro ... dlaczego by to uczynić zmysły ?? – Juri
dlatego pytam .. – annaoj