Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

JComboBox a dialogy v Java Swing

V minulé lekci, Layouty v Javě (podruhé), jsme si ukázali zbytek dostupných layoutů.

JComboBox

Co to vlastně je? JComboBox je jednoduchý rozbalovací setříděný seznam, který na první pohled zobrazuje pouze jednu položku. Po kliknutí na postranní šípku se seznam rozbalí a jsou vidět všechny položky výběru, na které poté můžete kliknout a vybrat jednu z možností (položek seznamu).

Výhody: Komponenta rozhodně šetří místo stejně jako MenuBar. Položky v ComboBoxu jsou číslované a dá se k nim přistupovat pomocí indexů. Položky lze přidávat i za běhu programu.

Nejčastěji používané metody:

  1. addItem(položka) - přidá položku do seznamu na poslední pozici
  2. insertItem(položka, int pozice) - přidá položku do seznamu na Vámi zvolenou pozici
  3. getSelectedItem() - získání označené položky seznamu
  4. getSelectedIndex() - získání indexu označené položky seznamu
  5. removeAllItems() - smaže všechny položky seznamu
  6. removeItemAt(int pozice) - smaže položku na dané pozici
  7. getItemCount() - vrátí počet položek seznamu

Příklad

Náš úkol bude jednoduchý. Prostě vytvoříme 6 ComboBoxů, do kterých uložíme čísla v rozmezí -9 až 9. První tři ComboBoxy budou označovat Vektor a1 a zbylé tři budou označovat vektor a2. Po stisknutí tlačítka sečteme oba vektory a výsledek(výsledný vektor d) si vypíšeme pomocí dialogu, který si poté popíšeme.

Nejprve si vytvoříme třídu MyFrame, sepíšeme komponenty které budeme používat a konstruktor:

import java.awt.Container;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MyFrame extends JFrame
{
    private Container pane;
    private JComboBox x1, y1, z1, x2, y2, z2;
    private JButton secti;
    private int x,y,z;
    private JLabel a1, a2;
    private JPanel prvniVektor, druhyVektor;

    public MyFrame()
    {
        this.setSize(300, 200);
        this.setTitle("použití Comboboxů");
        pane = this.getContentPane();
        pane.setLayout(new BoxLayout(pane,BoxLayout.PAGE_AXIS));
        nastavKomponenty();
        nastavListenery();
    }
}

Začnu u použitých komponent. Nastavili jsme 6 ComboBoxů, tlačítko nám poslouží při vytvoření události. Dále jsme vytvořili 3 čísla (x,y,z), které použijeme při výpočtu našeho výsledného vektoru d. Potom zde máme 2 popisky a dva panely do kterých poté uložíme KomboBoxy.

V konstruktoru jsme si nastavili výšku a šířku okna, popisek a hlavní panel, kterému jsme nastavili BoxLayout s parametrem(PA­GE_AXIS). To samozřejmě znamená že se komponenty budou řadit v okně pod sebe. Dále jsme nastavili volání 2 metod, které si teprve vytvoříme.

Za náš konstruktor si přidejte následující kus kódu:

public void nastavKomponenty() {
    prvniVektor = new JPanel();
    druhyVektor = new JPanel();
    x1 = new JComboBox();
    y1 = new JComboBox();
    z1 = new JComboBox();
    x2 = new JComboBox();
    y2 = new JComboBox();
    z2 = new JComboBox();
    for(int i = -9; i<10; i++) {
        x1.addItem(i);
        y1.addItem(i);
        z1.addItem(i);
        x2.addItem(i);
        y2.addItem(i);
        z2.addItem(i);
    }
    a1 = new JLabel("Vektro a1");
    a2 = new JLabel("Vektor a2");
    secti = new JButton("vypočti vektor D");

    prvniVektor.add(x1);
    prvniVektor.add(y1);
    prvniVektor.add(z1);
    druhyVektor.add(x2);
    druhyVektor.add(y2);
    druhyVektor.add(z2);

    pane.add(a1);
    pane.add(prvniVektor);
    pane.add(a2);
    pane.add(druhyVektor);
    pane.add(secti);
}

Podle názvu jste již jistě pochopili, že tato metoda nastavuje komponenty :). Nastavení panelů je vám zřejmě jasné. Zaměřím se proto na následující část kódu:

x1 = new JComboBox();

Tento kód vytváří pouze prázdný ComboBox a poté musíme čísla přidat až v cyklu for. Říkáte si že by bylo lepší vytvořit pole int[], které by jsme přidali už v konstruktoru. No, on je tu jeden problém. Konstruktor JComboBoxu nesmí mít jako parametr pole int[]. Program by prostě vyhodil chybu, proto čísla přidávám až v cyklu. Čísla se dají samozřejmě přidat jako pole String[]. Ono je to prakticky jedno, šlo by obojí.

Nastavení události

Za metodu na nastavKomponenty(), si vložte následující kód:

public void nastavListenery() {
    secti.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e){
            x = (int)x1.getSelectedItem() + (int)x2.getSelectedItem();
            y = (int)y1.getSelectedItem() + (int)y2.getSelectedItem();
            z = (int)z1.getSelectedItem() + (int)z2.getSelectedItem();
            JOptionPane.showMessageDialog(pane,"Výpočet vektoru d:\n"
               +"d = ("+x+","+y+","+z+")");
            }
        }
    );
}

Po stisknutí tlačítka se vyvolá výše popsaný kód. Použijeme naše proměnné x, y, z k výpočtu našeho vektroru d.

Výpočet je jednoduchý. Malý příklad:

Jsou dány vektory:

  • a1 = (3, 2, -1)
  • a2 = (-2, 6, -9)

určete d) a1 + a2

d = (3, 2, -1) + (-2, 6, -9) -> 3-2, 2+6, -1-9 -> (1, 8, -10)

U čísel si dále můžete všimnou, že stejně musíme použít přetypování na celočíselný datový typ pomocí příkazu (int). Proto jak sem již zmiňoval by nevadilo, kdybychom čísla přidaly jako pole String[].

Výsledek si zobrazíme pomocí dialogu. Slouží k tomu metoda .showMessageDi­alog(panel, "text"); Dialogy si po skončení tohoto příkladu popíšeme.

Teď jen přidáme za metodu nastavListenery() statickou metodu, která nám nastaví okno našeho programu. přidejte tedy následující kód:

public static Frame nastav() {
    MyFrame myframe = new MyFrame();
    myframe.setLocationRelativeTo(null);
    myframe.setVisible(true);
    return myframe;
}

Třídu MyFrame máme tedy hotovou. Teď jenom vytvoříme třídu Start, která nám okno vytvoří a spustí celý program přes metodu main.

public class Start
{
    public static void main(String args[]) {
        MyFrame.nastav();
    }
}

Příklad si samozřejmě můžete stáhnout.

Dialogy

Jsou to vlastně vyskakovací okna, která uživatele na něco upozorní, něco mu zobrazí, nebo se můžeme uživatele na něco zeptat a reagovat na jeho odpověď.

Metoda pro zobrazení oznamovacího dialogu vypadá následovně:

JOptionPane.show­MessageDialog(pa­nel, "text"); - tento dialog používá základní nastavení.

  • panel = určuje panel ve kterém se má dialog zobrazit.

Můžeme náš dialog definovat přesněji.

JOptionPane.showMessageDialog(panel, "text", "titulek", param);

param:

  • JOptionPane.WAR­NING_MESSAGE - Výstražné okno
  • JOptionPane.ER­ROR_MESSAGE - Chybové okno
  • JOptionPane.PLA­IN_MESSAGE - okno bez ikony

Můžete také vytvořit vlastní dialog s vlastní ikonou a přidat ji do našeho okna:

JOptionPane.showMessageDialog(panel, "Váš text", "titulek", JOptionPane.INFORMATION_MESSAGE, Icon icon);

Poslední zmíněné je informační okno. To jsou dialogy které uživatele informují, nebo upozorňují na nějakou událost tzv. MessageDialog.

Teď si předvedeme tzv. OptionDialog.

showOptionDialog(panel, "text", "titulek", typ tlačítek , typ zprávy, Icon icon);

typ tlačítek:

  • OK_OPTION - tlačítko ok (potvrdit)
  • OK_CANCEL_OPTION - tlačítka ok a cancel (potvrdit, zrušit)
  • NO_OPTION - tlačítko no (odmítnout)
  • YES_OPTION - tlačítno yes (ano);
  • CANCEL_OPTION - tlačítko cancel (zrušit)
  • YES_NO_OPTION - tlačitka yes, no (ano, ne);
  • YES_NO_CANCEL_OP­TION - tlačítka yes, no, cancel

typ zprávy - QUESTION_MESSAGE. Celým zápisem - JOptionPane.QU­ESTION_MESSAGE

Komu by to nestačilo, tak tady je celé volání:

showOptionDialog(panel, "text", "titulek", typ , int Type, Icon icon, Object[] popisky,
Object komponenty);

Poslední parametr určuje komponenty, které můžete použít například použití ProgressBaru. Uvedu malý příklad použití OptionDialogu.

Container pane = this.GetContentPane();
pane.setLayout(new FlowLayout());
String[] nastaveni = {"potvrzuji","zrušit!!"};
int s = JOptionPane.showOptionDialog(pane, "Přijímáte můj pozdrav?",
"Otázka",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, null,
nastaveni, nastaveni[1]);

Výsledek vidíte sami:

Java dialog – Otázka - Java Swing bez grafického návrháře

Odpověď můžeme samozřejmě zjistit pomocí následujícího kódu:

if (s==JOptionPane.OK_OPTION)
{
//bylo stisknuto tlačítko OK
}
else{
//nebylo stisknuto tlačítko OK, nýbrž bylo stisknuto tlačítko CANCEL.
}

Tak to je pro dnešek vše, loučím se s Vámi a těším se na další shledání u dalšího pokračování seriálu Okenní aplikace v Javě.


 

Stáhnout

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

Staženo 236x (1.33 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í:
3 hlasů
Autor se věnuje programování, hardwaru a počítačovým sítím.
Aktivity