310 likes | 455 Views
GUI. Swing postupná tvorba aplikácie s dizajnom základné komponenty TextField Button CheckBox RadioButton ComboBox List. NetBean IDE GUI Builder. umožňuje tvorbu prostredia prostredníctvom drag & drop všetok potrebný kód generuje automaticky
E N D
GUI • Swing • postupná tvorba aplikácie s dizajnom • základné komponenty • TextField • Button • CheckBox • RadioButton • ComboBox • List
NetBean IDE GUI Builder umožňuje tvorbu prostredia prostredníctvom drag&drop všetok potrebný kód generuje automaticky skúsenejší/preferujúci manuálnu tvorbu kódu nemusia používať grafické prostredie a automaticky generovaný kód – všetko možno tvoriť aj manuálne
Úvodný príklad Vytvorte EURO-kalkulačku. Napíšte program, ktorý prevedie zadanú sumu v EURO na slovenské koruny.
Po krokoch ... štandardným spôsobom vytvoríme nový projekt
... po krokoch ... zadáme názov projektu zabezpečíme, aby nebolo odsuhlasené vytvorenie main classu
... po krokoch ... vytvorí sa „nejaký“ zdrojový kód, momentálne nie je zaujímavý do projektu vložíme JFrame – frame / okno / kontajner pre ďalšie komponenty
... po krokoch ... zadáme názov vytváraného formulára a odsúhlasíme
... výsledok získali sme formulár, na ktorý môžeme umiestňovať ďalšie swingové komponenty
Hotová aplikácia už v tomto momente však máme hotovú aplikáciu, ktorá po spustení dokáže: meniť svoje rozmery maximalizovať a minimalizovať sa zavrieť sa má k dispozícii všetky prvky okna operačného systému
Popis prvkov „nového“ prostredia nový vzhľad prostredia si od nás vyžaduje popis jeho častí
Popis prvkov „nového“ prostredia pracovná plocha dáva k dispozícii priestor na umiestňovanie komponentov predstavuje okno aplikácie paleta komponentov poskytuje zoznam komponentov, ktoré možno umiestniť na formulár a používať (spočiatku nám ich postačí len niekoľko málo) editor vlastností umožňuje zmeniť vlastnosti komponentov vložených na formulár zdrojový kód poskytuje okrem kódu, ktorý doň vložíme aj riadky, ktoré vygeneruje systém na základe manipulácie s komponentami zatiaľ pre nás nemusí byť zrozumiteľný prepínanie cez View – Editors – Source/Design
Návrh dizajnu začneme definovaním parametrov formulára kliknutím na formulár zabezpečíme, aby v editore vlastností boli zobrazené práve tie jeho nastavením vlastnosti Title určíme text titulného pruhu okna
Vloženie komponentov následne povkladáme nasledovné komponenty: JLabel popisné pole do vlastnosti text vložíme popisok, napr. „Zadaj sumu v EURO:“ JTextField na zadávanie sumy v eurách textové pole, do ktorého možno písať vlastnosť text nastavíme na prázdnu a vhodne upravíme veľkosť poľa JButton na prikázanie operácie prepočtu vlastnosť text nastavíme napr. na „Prepočítaj“ pre výpis výslednej hodnoty môžeme použiť opäť JLabel zmeníme mu veľkosť (prípadne aj font) na záver možno upraviť manuálne rozmery formulára
Programovanie dizajn máme hotový – aplikácia však okrem zobrazenia nedokáže nič pokiaľ chce používateľ komunikovať so swing-komponentami, musí tak urobiť prostredníctvom vykonania nejakej udalosti (klik na komponent, pohyb myšou, stlačenie klávesu a pod.) aplikácia vlastne len ticho beží a čaká na vznik udalosti keď udalosť nastane, vykoná sa príslušný kód tento spôsob programovania sa označuje ako udalosťami riadené programovanie
Udalosti existuje viac typov udalostí, často sú udalosti typické len pre niektoré komponenty v našom prípade potrebujeme udalosť, ktorá nastane pri kliknutí myšou na tlačidlo „Prepočítaj“ a akoby to nebolo dosť, rovnakú aktivitu by sme očakávali aj pri stlačení buttonu klávesnicou na tento účel máme v zozname udalostí (Events v kontextovom menu pre príslušný button) k dispozícii skupinu Action a udalosť actionPerformed.
Ošetrenie udalosti týmto výberom sa vytvorí v kóde metóda, do ktorej doplníme požadovanú funkcionalitu: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){ // precita sa text z komponentu textField String ret = jTextField1.getText(); // skonvertuje sa na cislo int Euro = Integer.parseInt(ret); // vykona sa prepocet double Sk = Euro * 30.126; // konverzia a vlozenie do jLabel2 jLabel2.setText(Double.toString(Sk)); }
Ďalšie komponenty Checkbox zaškrtávacie políčko (zapnutý/vypnutý niekedy nerozhodný) RadioButton výber jednej zo skupinymožností ComboBox rozbaľovacie tlačidlo rozbalenie a výber zo zoznamu Listbox viditeľný zoznam výber jednej alebo viac položiek
CheckBox Napíšte aplikáciu, ktorá vypočíta používateľovi vek, ktorého sa dožije na základe položených otázok. Otázky formulujte tak, aby na ne bolo možné odpovedať áno/nie a na zistenie odpovedí použite checkboxy.
Riešenie 1 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int vek = 100; // predpokladajme optimalny vek // isSelected podava info o zaskrtnuti if (jCheckBox1.isSelected()) vek = vek - 5; if (jCheckBox2.isSelected()) vek = vek - 5; if (jCheckBox3.isSelected()) vek = vek + 3; if (jCheckBox4.isSelected()) vek = vek + 1; jLabel1.setText(Integer.toString(vek)); }
RadioButton Na základe výberu jazyka privítajte používateľa vo vašom programe. zapnutie prvého RB riešime cez vlastnosť selected v editore vlastností
Riešenie 2 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // východzia hodnota String pozdrav = "Dobrý deň"; if (jRadioButton2.isSelected()) pozdrav="Good morning"; if (jRadioButton3.isSelected()) pozdrav="Guten morgen"; if (jRadioButton4.isSelected()) pozdrav="Zdravstvujte"; // výpis pozdravu JOptionPane.showMessageDialog(null, pozdrav);}
Problém riešenie sa správa zvláštne: umožňuje zapnúť viac RB naraz vyzerá to na nutnosť manuálneho vypínania RB private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) { jRadioButton1.setSelected(false); jRadioButton3.setSelected(false); jRadioButton4.setSelected(false); }
Efektívnejšie riešenie ButtonGroup vytvorí z tlačidiel skupinu tak, že zapnuté bude vždy len jedno treba však upraviť kód na mieste vzniku formulára (po inicializácii/vytvorení komponentov) public NewJFrame() { initComponents(); // vytvorí sa skupina ButtonGroup bg = new ButtonGroup(); // a pridaju sa do nej všetky RB bg.add(jRadioButton1); bg.add(jRadioButton2); bg.add(jRadioButton3); bg.add(jRadioButton4); }
ComboBox Vyberte zo zoznamu (opäť jazykov) jeden a na základe výberu pozdravte. využijeme vlastnosť model prostredníctvom ktorej naplníme CMB
Riešenie reakciu možno naprogramovať po kliknutí na tlačidlo ... private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String pozdrav = "Dobry den"; // porovnam vybrany text s anglicky if(jCMB1.getSelectedItem().toString().compareTo("anglicky") == 0) pozdrav = "Good morning"; if (jCMB1.getSelectedItem().toString().compareTo("nemecky") == 0) pozdrav = "Guten morgen"; // alebo pokial mam nemenny cmb, mozem len pozriet ktory index bol vybrany if (jCMB1.getSelectedIndex() == 3) pozdrav ="Zdravstvujte"; // vdaka parametru rootpane sa okno nezobrazi v strede obrazovky ale v strede nasej aplikacie JOptionPane.showMessageDialog(rootPane, pozdrav); }
Riešenie 2 ... alebo hneď po výbere v comboboxe (akcia Performed pre cmb)
List asi najzaujímavejší komponent umožňuje zobrazenie zoznamu tak, že ho aj celý vidieť Napíšte program, ktorý umožní ukladať a mazať zoznam čakateľov u lekára. Pravidlá na vybavovanie existujú, avšak ani pacienti ani vy ich nepoznáte = umožnite pridávať na koniec a mazať ktorýkoľvek označený záznam.
Riešenie dynamická práca so zoznamom si vyžaduje niekoľko nastavení: v prvom rade je potrebné disponovať zoznamom prvkov, ktoré budú zobrazované v jListe – vyžaduje sa ListModel (zoznam v pamäti, ktorý sa do komponentu len zobrazuje) deklarujeme (resp. vytvoríme) premennú tohto typu ako premennú s platnosťou v celom programe: public class Lekar extends javax.swing.JFrame { DefaultListModel zoznam = new DefaultListModel(); následne po vytvorení (inicializácii) komponentov prepojíme zoznam s jListom: public Lekar() { initComponents(); jList1.setModel(zoznam); }
Pridanie následne ošetríme udalosť pre pridanie prvku: // zistim pocet prvkov int pocet = zoznam.size(); // pridam hodnotu z textoveho pola na koniec zoznamu zoznam.insertElementAt(jTextField1.getText(),pocet); // textove pole vyprazdnim jTextField1.setText("");
Vymazanie a udalosť pre vymazanie aktuálneho prvku: // zistim index prvku, na ktorom som nastaveny int index = jList1.getSelectedIndex(); // ak nie som na prazdnom tak mam hodnotu 0 a viac if (index>-1) zoznam.remove(index); // riadok vymazem
Úlohy Pridajte do úlohy s Listboxom kontrolu, či sa v zozname už zadané meno nenachádza (hodnotu z riadku listboxu najdete ako zoznam.get(i)). Zabezpečte vyhodenie všetkých pacientov: so zadaným menom ktorých meno začína na zadaný text ktorých meno obsahuje zadaný text Naprogramujte jednoduchú kalkulačku: dve čísla zadávané do textového poľa a operácie súčtu, súčinu a rozdielu medzi nimi. pridajte podiel s ošetrením delenia nulou pridajte možnosť výberu výpočtu reálneho a celočíselného podielu so zvyškom Pre List vytvorte aparát na pridávanie a mazanie číselných hodnôt. Naprogramujte funkciu, ktorá párne čísla zdvojnásobí a nepárne zníži o 3. Pre List vytvorte aparát na pridávanie a mazanie. Preneste údaje do druhého Listu tak, aby v ňom boli usporiadané. Do školského basketbalového tímu prijímajú hráčov. Napíšte program, ktorý dokáže evidovať ich meno a výšku (v jednom alebo aj dvoch Listoch) údaje umožnite uložiť a načítať zo súboru pridajte funkciu, ktorá nájde najvyššieho žiaka a jeho náhradníka (t.j. druhý najvyšší). Pre text zadaný v textovoom poli zistite počet výskytov jednotlivých znakov a vypíšte ich do Listu.