MenuBar a práce s komponenty

Java Swing Swing bez grafického návrháře MenuBar a práce s komponenty

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ě

 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal Milan Gallas
Avatar
Autor se věnuje programování, hardwaru a počítačovým sítím.

Jak se ti líbí článek?
Celkem (4 hlasů) :
4444 4


 


Miniatura
Předchozí článek
JComboBox a dialogy v Java Swing
Miniatura
Všechny články v sekci
Java Swing bez grafického návrháře
Miniatura
Následující článek
ItemListener v Javě

 

 

Komentáře

Avatar
albertpatera
Redaktor
Avatar
albertpatera:

můžu se zeptat, jestli když mám MenuBar, jako tenhle tutorial, tak jestli je to pokračování GUI tutorialu nebo to je zase novej projekt? DÍKY

 
Odpovědět 7.8.2013 20:28
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na albertpatera
Milan Gallas:

Tenhle článek je samostatný projekt a na předchozí články přímo nenavazuje.

Editováno 7.8.2013 20:48
 
Odpovědět 7.8.2013 20:47
Avatar
Milan Gallas
Redaktor
Avatar
Milan Gallas:

Tím myslím že je to samostatná kapitola, která popisuje další možnosti použití knihovny swing.

 
Odpovědět 7.8.2013 20:57
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Milan Gallas
albertpatera:

ok díky melo mi to dojít :D

 
Odpovědět 7.8.2013 21:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.