IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Menubar a práca s komponentmi

V dnešnom tutoriále si ukážeme možnosti využitia komponenty Menubar, ktorá je súčasťou balíčka javax.swing. Menubar slúži ako jednoduché alebo vysúvacie menu v záhlaví dokumentu.

K čomu je to dobré

Jednoduchá orientácia v programe. Vďaka možnosti vysúvacieho menu tiež ušetríme potrebné miesto v programe, ktoré môžeme potom ďalej využiť.

Naše aplikácie

Pre ukážku si dnes urobíme jednoduchý program, ktorý nám pomocou menu umožní rýchlo a prehľadne pracovať s komponentom. Najprv si vytvoríme triedu MyMenu a importujeme potrebné knižnice:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyMenu extends JFrame
{

}

Pretože knižníc, ktoré dnes budeme využívať, je veľa a pretože vás nechcem všetkými knižnicami zaťažovať, tak si importujeme rovno celé balíky swing a awt. Potom si v našej triede nastavíme komponenty (atribúty), s ktorými ďalej budeme pracovať.

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;

Potom si nastavíme konštruktor triedy, v ktorom si nastavíme popisok okná, veľkosť a zavoláme si metódy (setKomponents () a setListeners ()), v ktorých potom nastavíme vlastnosti komponentov a naslouchávačů. Ďalej vytvoríme statickú metódu nastav, ktorá nastaví parametre 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;
}

Teraz už môžeme nastaviť metódu setKomponents () v našej triede MyMenu a budeme sledovať ten krásny efekt nášho 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);
}

Podľa uvedených komentárov ste si iste všimli, že som rozdelil metódu do takých 3 skupín kvôli prehľadnosti. Najprv si nastavím layout stránky (kde nastavíme hodnotu null) a vytvorím komponent, s ktorou budem naďalej pracovať. Vysvetlenie použitých príkazov:

  • setLocation (x, y) - umiestnenie komponenty na stránke.
  • setSize (x, y) - nastavenie veľkosti.
  • setLayout (null) - komponente nepriraďuje žiadny zo 7 možných layoutov. Pre naše účely dobré kvôli jednoduchosti.

Ďalej si vytvorím hlavnú časť menu. Nakoniec som nastavil jednotlivé položky menu, kde som použil aj oddeľujúce čiaru (príkaz addSeparator ()).

Teraz budeme postupne upravovať metódu setListeners (); Pre pripomenutie máme menu 4 výberov:

  • Blokácia - prvý výber
  • Farby - druhý výber
  • posuny - tretí výber
  • veľkosti - štvrtý výber

Samotná metóda:

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šimnite si, že v metóde definujeme všetky 4 už zmieňované výbery.

Pri položke z prvého výberu sa nastavuje:

  • povolenie komponentný = ak je komponent zablokovaná povolí ju.
  • blokácia komponenty = znemožní kliknúť na tlačidlo.

hlavni.setEnabled (! hlavni.isEnabled ()) - vracia negáciu aktuálneho nastavenia

U položiek druhého výberu nastavujeme:

  • farbu pozadia = u prvých troch položiek
  • farbu komponentov = u zvyšných troch položiek (položky vyskytujúce sa za oddeľujúce čiarou).

U položiek tretieho výberu sme nastavili pozicovanie komponenty v závislosti na koeficientu, ktorý sa nastavuje až u 4 výbere.

Možné posuny:

  • doľava - posunie komponent do ľavej časti okna a roztiahne pozdĺž kraja. Prí pozíciovanie nerieši koeficient.
  • doprava - posunie komponent do pravej časti okna a roztiahne pozdĺž kraja. pozíciovanie je zzávislé na koeficientu.
  • hore - posunie komponent do hornej časti okna a roztiahne pozdĺž kraja. pozíciovanie je závislé na koeficientu.
  • bane - posunie komponent do spodnej časti programu a roztiahne pozdĺž kraja. Pri pozíciovanie pracuje s koeficientom rovnako ako ponuka doprava.

U položiek štvrtého výberu sa nastavuje koeficient veľkosti. Pre koeficient platí:

  • male: k = 1; -> veľkosť 50 px.
  • velke: k = 2; -> veľkosť 100px;

triedu MyMenu máme teda hotovú. Teraz stačí len vytvoriť triedu Štart, kde program spustíme cez metódu main. trieda Štart:

public class Start
{
   public static void main(String args[]){
       MyMenu.nastav();
    }
}
Menubar v Jave - Java Swing bez grafického návrhára

 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 376x (13.36 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Layouty v Jave (druhýkrát)
Všetky články v sekcii
Java Swing bez grafického návrhára
Článok pre vás napísal Milan Gallas
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity