Mam panel wyprowadzony z JPanel
. Mam niestandardową kontrolę pochodzącą z JLabel
. Próbuję wyśrodkować ten niestandardowy JLabel
na moim panelu.Wyśrodkowanie JLabel w JPanel
Jedyny sposób, w jaki mogę to zrobić, to użyć układu pustego (setLayout(null)
), a następnie obliczyć niestandardowy punkt JLabel o wartości setLocation()
, tak aby znalazł się we właściwym miejscu.
Niestandardowy JLabel
został fizycznie przeniesiony z jednego panelu do tego panelu w tej aplikacji i uważam, że lokalizacja wcześniej ustawiona w setLocation
wpływa na rzeczy. Jednak gdy ustawię go na (0,0), komponent znajdzie się w lewym górnym rogu.
BorderLayout
nie działa, ponieważ gdy tylko 1 komponent jest dostarczony i umieszczony w BorderLayout.CENTER
, środkowa sekcja rozszerza się, aby wypełnić całą przestrzeń.
Przykład wycinany i wklejany z innej witryny używanej pod BoxLayout
i component.setAlignmentX(Component.CENTER_ALIGNMENT)
. To też nie działa.
Inna odpowiedź wspomniała o nadpisaniu funkcji panelu getInset()
(myślę, że tak się nazywał), ale to okazało się ślepym zaułkiem.
Do tej pory pracuję z panelem o układzie GridBagLayout
i dołączam obiekt GridBagConstraints
po wstawieniu niestandardowego JLabel
do mojego panelu. Jest to jednak nieefektywne. Czy istnieje lepszy sposób wyśrodkowania JLabel
w moim JPanel
?
Zastanów się nad wydobyciem faktycznego pytania z tantiem. –
Aha, i po użyciu metody GridBagLayout i GridBagConstraints rzeczy wyglądają dobrze, jeśli minimalizuję, a następnie przywracam główne okno. – Shackleford
Czas na napisanie tego całego tłumaczenia był wystarczający do wpisania google 'Swing przy pracy z menedżerami layoutów', kliknięciu pierwszego hitu oficjalnych tutoriali swingowych, obejrzeniu wizualnego przewodnika, zdecydowania BoxLayout wygląda obiecująco i zobaczenia przykładu, który robi więcej lub mniej tego, co chcesz (zawiera dwa komponenty pojedyncze) – Robin