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

JComboBox a dialógy v Java Swing

JComboBox

Čo to vlastne je? JComboBox je jednoduchý rozbaľovacej zotriedený zoznam, ktorý na prvý pohľad zobrazuje iba jednu položku. Po kliknutí na postranné šípok sa zoznam rozbalí a sú vidieť všetky položky výberu, na ktoré potom môžete kliknúť a vybrať jednu z možností (položiek zoznamu).

Výhody: Komponent rozhodne šetrí miesto rovnako ako Menubar. Položky v combobox sú očíslované a dá sa k nim pristupovať pomocou indexov. Položky je možné pridávať aj za behu programu.

Najčastejšie používané metódy:

  1. addit (položka) - pridá položku do zoznamu na poslednej pozícii
  2. insertItem (položka, int pozície) - pridá položku do zoznamu na Vami zvolenú pozíciu
  3. getSelectedItem () - získanie označené položky zoznamu
  4. getSelectedIndex () - získanie indexu označené položky zoznamu
  5. removeAllItems () - zmaže všetky položky zoznamu
  6. removeItemAt (int pozícia) - zmaže položku na danej pozícii
  7. getItemCount () - vráti počet položiek zoznamu

Príklad

Náš úloha bude jednoduchý. Proste vytvoríme 6 ComboBox, do ktorých uložíme čísla v rozmedzí -9 až 9. Prvé tri combobox budú označovať Vektor a1 a zvyšné tri budú označovať vektor a2. Po stlačení tlačidla sčítame obaja vektory a výsledok (výsledný vektor d) si vypíšeme pomocou dialógu, ktorý si potom popíšeme.

Najprv si vytvoríme triedu MyFrame, spíšeme komponenty ktoré budeme používať a konštruktor:

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čnem u použitých komponentov. Nastavili sme 6 ComboBox, tlačidlo nám poslúži pri vytvorení udalosti. Ďalej sme vytvorili 3 čísla (x, y, z), ktoré použijeme pri výpočte nášho výsledného vektora d. Potom tu máme 2 popisky a dva panely do ktorých potom uložíme KomboBoxy.

V konstruktoru sme si nastavili výšku a šírku okná, popis a hlavný panel, ktorému sme nastavili BoxLayout s parametrom (PAGE_AXIS). To samozrejme znamená že sa komponenty budú radiť v okne pod seba. Ďalej sme nastavili volanie 2 metód, ktoré si ešte len vytvoríme.

Za náš konštruktor si pridajte nasledujúci 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);
}

Podľa názvu ste už iste pochopili, že táto metóda nastavuje komponenty :) . Nastavenie panelov je vám zrejme jasné. Zameriam sa preto na nasledujúcu časť kódu:

x1 = new JComboBox();

Tento kód vytvára iba prázdny ComboBox a potom musíme čísla pridať až v cykle for. Hovoríte si že by bolo lepšie vytvoriť pole int [], ktoré by sme pridali už v konstruktoru. No, on je tu jeden problém. Konštruktor JComboBoxu nesmie mať ako parameter pole int []. Program by jednoducho vyhodil chybu, preto čísla pridávam až v cykle. Čísla sa dajú samozrejme pridať ako pole String []. Ono je to prakticky jedno, išlo by oboje.

Nastavenie udalosti

Za metódu na nastavKomponenty (), si vložte nasledujúci 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 stlačení tlačidla sa vyvolá vyššie popísaný kód. Použijeme naše premennej x, y, zk výpočtu nášho vektroru d.

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

Sú dané vektory:

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

určte d) a1 + a2

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

U čísel si ďalej môžete všimnú, že rovnako musíme použiť pretypovanie na celočíselný dátový typ pomocou príkazu (int). Preto ako sem už spomínal by nevadilo, keby sme čísla pridali ako pole String [].

Výsledok si zobrazíme pomocou dialógu. Slúži na to metóda .showMessageDialog (panel, "text"); Dialógy si po skončení tohto príkladu popíšeme.

Teraz len pridáme za metódu nastavListenery () statickú metódu, ktorá nám nastaví okno nášho programu. pridajte teda nasledujúci kód:

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

Triedu MyFrame máme teda hotovú. Teraz len vytvoríme triedu Štart, ktorá nám okno vytvorí a spustí celý program cez metódu main.

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

Príklad si samozrejme môžete stiahnuť.

Dialógy

Sú to vlastne vyskakovacie okná, ktoré používateľa na niečo upozorní, niečo mu zobrazí, alebo sa môžeme používateľa na niečo opýtať a reagovať na jeho odpoveď.

Metóda pre zobrazenie oznamovacieho dialógu vyzerá nasledovne:

JOptionPane.show­MessageDialog (panel, "text"); - tento dialóg používa základné nastavenie.

  • panel = určuje panel v ktorom sa má dialóg zobraziť.

Môžeme náš dialóg definovať presnejšie.

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 tiež vytvoriť vlastný dialóg s vlastnou ikonou a pridať ju do nášho okna:

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

Posledné spomínané je informačné okno. To sú dialógy ktoré používateľa informujú, alebo upozorňujú na nejakú udalosť tzv. MessageDialog.

Teraz si predvedieme tzv. OptionDialog.

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

typ tlačidiel:

  • OK_OPTION - tlačidlo ok (potvrdiť)
  • OK_CANCEL_OPTION - tlačidlá ok a cancel (potvrdiť, zrušiť)
  • NO_OPTION - tlačidlo no (odmietnuť)
  • YES_OPTION - tlačítno yes (áno);
  • CANCEL_OPTION - tlačidlo cancel (zrušiť)
  • YES_NO_OPTION - tlačidla yes, no (áno, nie);
  • YES_NO_CANCEL_OP­TION - tlačidlá yes, no, cancel

typ správy - QUESTION_MESSAGE. Celým zápisom - JOptionPane.QU­ESTION_MESSAGE

Komu by to nestačilo, tak tu je celé volanie:

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

Posledný parameter určuje komponenty, ktoré môžete použiť napríklad použitie progressbar. Uvediem malý príklad použitia 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ýsledok vidíte sami:

Java dialóg – Otázka - Java Swing bez grafického návrhára

Odpoveď môžeme samozrejme zistiť pomocou nasledujúceho 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 pre dnešok všetko, lúčim sa s Vami a teším sa na ďalšie stretnutie u ďalšieho pokračovania seriálu Okenné aplikácie v Jave.


 

Stiahnuť

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

Stiahnuté 237x (1.33 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