Hi Używam BoxLayout
stos JPanel
s na szczycie siebie (BoxLayout.Y_AXIS
), na przykład, czy mój rodzic JPanel
ma wysokość 500 pikseli i dodaję dwa panele podrzędne do niego zarówno z wysokość 100 pikseli. BoxLayout
rozciąga je tak, że razem zajmują przestrzeń 500px. Czy ktoś wie, jak wyłączyć tę funkcję?BoxLayout rozciąga komponent dopasować panel rodzic
Odpowiedz
Zamiast tego użyj GridBagLayout. Masz większą kontrolę nad swoim interfejsem użytkownika.
Ale jeśli chcesz nadal używać BoxLayout i nie chcesz, aby się rozciągały, możesz sprawdzić, używając invisible component fillers jak sztywne obszary, klej i wypełniacze.
Jeśli nie chcesz głosować na mnie, podaj przyczynę – Ascalonian
Pamiętaj, aby zapoznać się z sekcją "Poziomy klej" w opublikowanym linku. Bardzo pomocne. – FuriousFolder
Twoje panele się rozciągają, ponieważ BoxLayout nie ogranicza każdego panelu do jego preferowanego rozmiaru. Musisz znaleźć układy, które są zgodne z preferowanym rozmiarem komponentu, jak to ma miejsce w pozycjach NORTH i SOUTH w BorderLayout.
Spróbuj tego:
- Tworzenie JPanel z BorderLayout. Dodaj element potomny jako PÓŁNOCNY w tym JPanelu.
- Utwórz drugi JPanel dla drugiego komponentu potomnego, dodaj go jako PÓŁNIEJ z BorderLayout
- Dodaj dwa JPanele do swojej BoxLayout.
Kod:
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(component1, BorderLayout.NORTH);
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(component2, BorderLayout.NORTH);
JPanel boxPanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(boxLayout);
boxPanel.add(panel1);
boxPanel.add(panel2);
Podoba mi się to rozwiązanie, ponieważ pozwala uniknąć bałaganu z siatką i modyfikowania samych elementów, co jest ogromnym plusem. –
Sztuką jest, jak poprzednia odpowiedź wspomniano, użycie kleju, wypełniacze i obszary sztywne w układzie pudełko. Jednak w odróżnieniu od tego, który odpowiada, polecam trzymać się z BoxLayout - w przypadku Boxa można łatwiej wykonywać najprostsze interfejsy niż w przypadku Grid Bag; a dodatkowa moc nie kupuje zbyt wiele w typowym oknie dialogowym.
W starym idiomie były takie rzeczy jak Box.createHorizontalStrut (int x) i Box.createHorizontalGlue(); chodzi o to, że umieszczasz rozpórkę między pierwszym i drugim komponentem, a następnie dodajesz klej po drugim. ("strut" = "sztywny obszar" w dzisiejszych czasach).
Zgadzam się z tym dla ogólnych celów układania GridBagLayout może być przesadą. Sugeruję to, jeśli pójdzie do przodu. – Ascalonian
Próbowałem umieścić sztywny obszar między dwoma panelami dla dzieci i klejem pionowym po drugim, położyć panele są nadal rozciągnięte: s – Aly
Nie ma czegoś takiego jak przesada :) – willcodejavaforfood
BoxLayout jest jednym z niewielu menedżerów układów, które respektują minimalne i maksymalne rozmiary komponentu. Więc jeśli chcesz zapobiec rozciągnięciu panelu, możesz użyć:
panel.setMaximumSize(panel.getPreferredSize());
To mogło być jakiś czas temu, ale czy używasz nadpisanej metody getPreferredSize()? – MikeM
@MikeM, nie, ponieważ panel powołuje się na menedżera układu, aby zwrócić preferowany rozmiar. Właściwie lepszym rozwiązaniem jest rozszerzenie JPanel i nadpisanie metody 'getMaximumSize()' w celu prostego zwrócenia wartości z metody 'getPreferredSize()'. W ten sposób maksymalny rozmiar zostanie obliczony dynamicznie w przypadku, gdy preferowany rozmiar zmienia się dynamicznie. – camickr
Interesujące, dzięki. – MikeM
To wydaje się działać idealnie dobrze ... używając BoxLayout, jak chciałeś.
this.setLayout(new FlowLayout()); // this being the JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(500, 500));
panel.setBackground(Color.orange);
this.add(panel); // add the parent to the JFrame
JPanel pnlChild1 = new JPanel();
pnlChild1.setBackground(Color.cyan);
pnlChild1.setMaximumSize(new Dimension(200, 100));
JPanel pnlChild2 = new JPanel();
pnlChild2.setBackground(Color.magenta);
pnlChild2.setMaximumSize(new Dimension(200, 100));
panel.add(pnlChild1);
panel.add(pnlChild2);
- 1. get rodzic rozciąga klasy w php
- 2. Resize rodzic div dopasować dziecko div
- 3. ExtJS 4/Sencha Touch Container, komponent, element i panel
- 4. Dostęp „to” jako rodzic z Callbacki emberjs zagnieżdżony komponent
- 5. Komponent na powierzchni szkła
- 6. BoxLayout nie może być udostępniony błąd
- 7. Jak setSupportActionBar w widoku, który rozciąga LifecycleActivity
- 8. Jak programowo utworzyć komponent złożony lub komponent znacznika?
- 9. Panel niestandardowy z silnikiem układu
- 10. rozciąga klasy z prywatnych konstruktora
- 11. Szyny silnik rozciąga config/environment.rb
- 12. Zagnieżdżony rozciąga się w generycznych
- 13. panel administracyjny ostatnie akcje
- 14. Automatycznie przewijany panel
- 15. Panel partycji Gephi 0.9.0
- 16. Google Material Expansion Panel
- 17. Panel kontrolny obsługujący d3
- 18. Wysunąć panel z bootstrapem
- 19. Panel "Nieskończony" w WPF
- 20. Firebug Net Panel Logs
- 21. SplitContainer panel Resize Issue
- 22. ExtJS Przesuwne panel
- 23. błąd Eclipse panel Właściwości
- 24. . Panel Dock .NET?
- 25. Panel przezroczystości firefox addon
- 26. Kontrola użytkownika WPF Rodzic
- 27. Rodzic dziecko mysql
- 28. jQuery: appendTo rodzic
- 29. CSS Rodzic/Przodek Selector
- 30. Zmień gałąź rodzic
Jak ty sepcifying rozmiaru paneli podrzędnych? – Ascalonian
Z panel.setPrefferedSize i panel.setMinimumSize oba przy użyciu tego samego wymiaru – Aly