MenuBar a práce s komponenty
V minulé lekci, Layouty v Javě (podruhé), jsme si ukázali zbytek dostupných layoutů.
V dnešním tutoriálu si ukážeme možnosti využití komponenty MenuBar, která je součástí balíčku javax.swing. MenuBar slouží jako jednoduché nebo vysouvací menu v záhlaví dokumentu.
K čemu je to dobré
Snadná orientace v programu. Díky možnosti vysouvacího menu také ušetříme potřebné místo v programu, které můžeme pak dále využít.
Naše aplikace
Pro ukázku si dnes uděláme jednoduchý program, který nám pomocí menu umožní rychle a přehledně pracovat s komponentou. Nejprve si vytvoříme třídu MyMenu a importujeme potřebné knihovny:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class MyMenu extends JFrame { }
Protože knihoven, které dnes budeme využívat, je hodně a protože vás nechci všemi knihovnami zatěžovat, tak si importujeme rovnou celé balíčky swing a awt. Pak si v naší třídě nastavíme komponenty (atributy), se kterými dále budeme pracovat.
private MenuBar nav; private Menu blokace, barvy, posuny, velikosti; private MenuItem povolit_zakazat; private MenuItem ruzovePozadi, zlutePozadi, bilePozadi; private MenuItem cerneKomponenty, hnedeKomponenty, darkKomponenty; private MenuItem vlevo, vpravo, nahoru, dolu; private MenuItem male, velke; private JButton hlavni; private int k = 1; // koeficient udává velikost komponenty private Container pane;
Poté si nastavíme konstruktor třídy, ve kterém si nastavíme popisek okna, velikost a zavoláme si metody (setKomponents() a setListeners()), ve kterých poté nastavíme vlastnosti komponent a naslouchávačů. Dále vytvoříme statickou metodu nastav, která nastaví parametry okna.
public MyMenu() { this.setSize(700, 500); this.setTitle("MenuBar"); this.setKomponents(); this.setListeners(); } public static Frame nastav() { MyMenu m = new MyMenu(); m.setLocationRelativeTo(null); m.setVisible(true); return m; }
Nyní již můžeme nastavit metodu setKomponents() v naší třídě MyMenu a budeme sledovat ten krásný efekt našeho menu.
public void setKomponents() { /** * Layout a komponenta */ this.pane = this.getContentPane(); this.pane.setLayout(null); this.hlavni = new JButton(); this.hlavni.setLayout(null); this.hlavni.setLocation(325, 200); this.hlavni.setSize(50, 50); this.hlavni.setBackground(Color.BLACK); this.pane.add(this.hlavni); /** * Hlavní část menu */ this.nav = new MenuBar(); this.setMenuBar(this.nav); this.blokace = new Menu("blokace"); this.barvy = new Menu("barvy"); this.posuny = new Menu("posuny"); this.velikosti = new Menu("velikosti"); this.nav.add(this.blokace); this.nav.add(this.barvy); this.nav.add(this.posuny); this.nav.add(this.velikosti); /** * Položky podmenu */ this.povolit_zakazat = new MenuItem("Povolit/Zakázat"); this.ruzovePozadi = new MenuItem("Růžové pozadí"); this.zlutePozadi = new MenuItem("Žluté pozadí"); this.bilePozadi = new MenuItem("Bílé pozadí"); this.cerneKomponenty = new MenuItem("Černé komponenty"); this.hnedeKomponenty = new MenuItem("Hnědé komponetny"); this.darkKomponenty = new MenuItem("Dark_Gray komponetny"); this.vlevo = new MenuItem("Vlevo"); this.vpravo = new MenuItem("Vpravo"); this.nahoru = new MenuItem("Nahoru"); this.dolu = new MenuItem("Dolu"); this.male = new MenuItem("Malé"); this.velke = new MenuItem("Velké"); this.blokace.add(this.povolit_zakazat); this.barvy.add(this.ruzovePozadi); this.barvy.add(this.zlutePozadi); this.barvy.add(this.bilePozadi); this.barvy.addSeparator(); //dělící čára this.barvy.add(this.cerneKomponenty); this.barvy.add(this.hnedeKomponenty); this.barvy.add(this.darkKomponenty); this.posuny.add(this.vlevo); this.posuny.add(this.vpravo); this.posuny.add(this.nahoru); this.posuny.add(this.dolu); this.velikosti.add(this.male); this.velikosti.add(this.velke); }
Podle uvedených komentářů jste si jistě všimli, že jsem rozdělil metodu do takových 3 skupin kvůli přehlednosti. Nejprve si nastavím layout stránky (kde nastavíme hodnotu null) a vytvořím komponentu, se kterou budu nadále pracovat. Vysvětlení použitých příkazů:
- setLocation(x,y) - umístění komponenty na stránce.
- setSize(x,y) - nastavení velikosti.
- setLayout(null) - komponentě nepřiřazujeme žádný ze 7 možných layoutů. Pro naše účely dobré kvůli jednoduchosti.
Dále si vytvořím hlavní část menu. Nakonec jsem nastavil jednotlivé položky menu, kde jsem použil i oddělující čáru (příkaz addSeparator()).
Teď budeme postupně upravovat metodu setListeners(); Pro připomenutí máme menu 4 výběrů:
- Blokace - první výběr
- Barvy - druhý výběr
- posuny - třetí výběr
- velikosti - čtvrtý výběr
Samotná metoda:
public void setListeners() { //první výběr this.povolit_zakazat.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setEnabled(!hlavni.isEnabled()); }}); /** * Druhý výběr */ this.ruzovePozadi.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ pane.setBackground(Color.PINK); }}); this.zlutePozadi.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ pane.setBackground(Color.YELLOW); }}); this.bilePozadi.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ pane.setBackground(Color.WHITE); }}); this.cerneKomponenty.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setBackground(Color.BLACK); }}); this.hnedeKomponenty.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Color hneda = new Color(102,51,0); hlavni.setBackground(hneda); }}); this.darkKomponenty.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setBackground(Color.DARK_GRAY); }}); /** * Třetí výběr */ this.vlevo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setSize((k*50), 500); hlavni.setLocation(0,0); }}); this.vpravo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setSize((k*50), 500); if(k == 1){ hlavni.setLocation(650,0);} else{ hlavni.setLocation(600,0); } }}); this.nahoru.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setSize(700, (k*50)); hlavni.setLocation(0,0); }}); this.dolu.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hlavni.setSize(700, (k*50)); if(k == 1){ hlavni.setLocation(0,400); } else { hlavni.setLocation(0,355); } }}); /** * čtvrtý výběr */ this.velke.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ k = 2; }}); this.male.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ k = 1; }}); }
Všimněte si, že v metodě definujeme všechny 4 již zmiňované výběry.
U položky z prvního výběru se nastavuje:
- povolení komponetny = pokud je komponenta zablokovaná povolí ji.
- blokace komponenty = znemožní kliknout na tlačítko.
hlavni.setEnabled(!hlavni.isEnabled()) - vrací negaci aktuálního nastavení
U položek druhého výběru nastavujeme:
- barvu pozadí = u prvních tří položek
- barvu komponent = u zbylých tří položek(položky vyskytující se za oddělující čárou).
U položek třetího výběru jsme nastavili pozicování komponenty v závislosti na koeficientu, který se nastavuje až u 4 výběru.
Možné posuny:
- doleva - posune komponentu do levé části okna a roztáhne podél kraje. Pří pozicování neřeší koeficient.
- doprava - posune komponentu do pravé části okna a roztáhne podél kraje. pozicování je zzávislé na koeficientu.
- nahoru - posune komponentu do horní části okna a roztáhne podél kraje.pozicování je závislé na koeficientu.
- dolu - posune komponentu do spodní části programu a roztáhne podél kraje. Při pozicování pracuje s koeficientem stejně jako nabídka doprava.
U položek čtvrtého výběru se nastavuje koeficient velikosti. Pro koeficient platí:
- male: k = 1; -> velikost 50 px.
- velke: k =2; -> velikost 100px;
třídu MyMenu máme tedy hotovou. Teď stačí jen vytvořit třídu Start, kde program spustíme přes metodu main. třída Start:
public class Start { public static void main(String args[]){ MyMenu.nastav(); } }

Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 377x (13.36 kB)
Aplikace je včetně zdrojových kódů v jazyce Java