IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.setEna­bled(!hlavni.i­sEnabled()) - 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();
    }
}
MenuBar v Javě - Java Swing bez grafického návrháře

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 374x (13.36 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Layouty v Javě (podruhé)
Všechny články v sekci
Java Swing bez grafického návrháře
Článek pro vás napsal Milan Gallas
Avatar
Uživatelské hodnocení:
4 hlasů
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity