Wypełnienie JPanel w Javie

107

Mam pytanie dotyczące formatowania mojej aplikacji swingowej Java. Powinno to być dość proste, ale mam trudności ze znalezieniem jakiejkolwiek pomocy (wydaje się, że każdy temat dotyczy usunięcia domyślnego wypełnienia w JPanel). Tekst w moich różnych JPanelach obejmuje boki i górę, dotykając kolorowych ramek: jak dodać wypełnienie? Dziękuję Ci.

Connor
źródło

Odpowiedzi:

234

Ustaw EmptyBorderwokół swojego JPanel.
Przykład:

JPanel p =new JPanel();
p.setBorder(new EmptyBorder(10, 10, 10, 10));
Julien Vermillard
źródło
45
lub możesz mieć dodatkowe wypełnienie wokół istniejącej granicy:p.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(10, 10, 10, 10), new EtchedBorder()));
Synox
Co się dzieje, gdy zmienia się rozmiar okna? To nie jest dobre rozwiązanie, prawda?
Andrew S
@Synox Legend rzeczywiście! Zauważ, że możesz umieścić EmptyBorder jako ostatni parametr wewnętrznego dopełnienia
Hunter S
3

Jeśli potrzebujesz dopełnienia wewnątrz, JPanelzazwyczaj dodajesz dopełnienie za pomocą używanego menedżera układu. Są przypadki, w których możesz po prostu rozszerzyć granicę JPanel.

jzd
źródło
1
Dodanie wypełnienia do menedżera układu (w moim przypadku GridLayout) powoduje dodanie wypełnienia między sąsiednimi panelami, ale nie w ramach pojedynczego panelu. Ale granica wystarczy, dziękuję za pomoc.
Connor,
3

Przypuszczam, że twój JPanel zawiera JTextField, na potrzeby wersji demonstracyjnej.

Te komponenty zapewniają JTextComponent#setMargin()metodę, która wydaje się być tym, czego szukasz.

Jeśli szukasz pustego obramowania dowolnego rozmiaru wokół tekstu, użyj EmptyBorder

Riduidel
źródło
0
JPanel p=new JPanel();  
GridBagLayout layout=new GridBagLayout(); 
p.setLayout(layout); 
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill=GridBagConstraints.HORIZONTAL; 
gbc.gridx=0;   
gbc.gridy=0;   
p2.add("",gbc);
Demetrio
źródło