JPanel
Panel představuje nejjednodušší typ kontejnerové komponenty. Jeho jediným úkolem je organizovat komponenty, které jsou v něm obsaženy. Panely se používají při návrhu vzhledu okna. Za použití vhodného layout manageru umístíme na formulář panely, na tyto panely následně další komponenty. Pro JPanel lzepoužít následující konstruktory:
JPanel();
JPanel(LayoutManager);
První konstruktor vytvoří panel s výchozím layout managerem (FlowLayout), druhý konstruktor vytvoří panel s rozložením komponent dle zadaného layout manageru. Vzhled panelu a jeho okraje (borders) je možno nastavit prostřednictvím metody setBorder (Border b). V Javě existuje několik typů borderů, jejich přehled je uveden v následující tabulce.
Border | Varianty |
BevelBorder | BevelBorder.LOWERED BevelBorder.RAISED |
CompoundBorder | - |
EmptyBorder | - |
EtchedBorder | EtchedBorder.LOWERED EtchedBorder.RASISED |
LineBorder | LineBorder.createBlackLineBorder() LineBorder.createGrayLineBorder() |
SoftBevelBorder | SoftBevelBorder.LOWERED SoftBevelBorder.RAISED |
TitledBorder | TitledBorder.DEFAULT_POSITION TitledBorder.LEFT TitledBorder.RIGHT TitledBorder.TOP TitledBorder.BOTTOM |
Popis jednotlivých borderů nebudeme z důvodu rozsáhlosti provádět, uvedeme pouze dvě doporučení. Pokud budeme chtít použít border bez ohraničení pouze jako podkladovou komponentu pro jiné komponenty, použijeme EmptyBorder.
Chceme -li použít border ohraničující komponenty na JPanelu, použijeme TitledBorder. Nastavení borderu pro panel provádíme metodou setBorder(Border b). V následujícím příkladu vytvoříme dva panely, oběma nastavíme TitledBorder a každému z nich titulek. Komponenty na formu budou využívat GridLayout.
Pro vytvoření panelů použijeme implicitní konstruktory.
JPanel p1=new JPanel();
JPanel p2=new JPanel();
Vytvoříme dvě instance třídy TitledBorder, v konstruktoru uvedeme titulky.
TitledBorder b1=new TitledBorder("První");
TitledBorder b2=new TitledBorder("Druhý");
Nastavíme polohu titulku na výchozí pozici, tj. vlevo nahoru.
b1.setTitlePosition(TitledBorder.DEFAULT_POSITION);
b2.setTitlePosition(TitledBorder.DEFAULT_POSITION);
Oběma panelům nastavíme vytvořené bordery.
p1.setBorder(b1);
p2.setBorder(b2);
public Panely(int width, int height) {
this.setSize(width, height);
this.setTitle("Panely");
this.setLayout(new GridLayout(2,1));
JPanel p1=new JPanel();
JPanel p2=new JPanel();
TitledBorder b1=new TitledBorder("První");
TitledBorder b2=new TitledBorder("Druhý");
b1.setTitlePosition(TitledBorder.DEFAULT_POSITION);
b2.setTitlePosition(TitledBorder.DEFAULT_POSITION);
p1.setBorder(b1);
p2.setBorder(b2);
this.getContentPane().add(p1);
this.getContentPane().add(p2);
}
Do každého z panelů můžeme následně přidat dvě tlačítka. Oběma panelům nastavíme opět BorderLayout.
p1.setLayout(new GridLayout(1,2));
p2.setLayout(new GridLayout(1,2));
Vytvoříme dvě tlačítka a metodou add() je přidáme na panely. Při práci s panely již není potřeba pracovat s grafckým kontextem komponenty prostřednictvím metody getContentPane().
JButton but1=new JButton("Prvni");
JButton but2=new JButton("Druhe");
JButton but3=new JButton("Treti");
JButton but4=new JButton("Ctvrte");
p1.add(but1);
p1.add(but2);
p2.add(but3);
p2.add(but4)
Autor: Filip Koval