pr1j_11_swing.ppt
Stiahnuť PPT · 609 kBPreber si túto poznámku so svojou AI
Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.
Náhľad poznámky
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 skupiny
mož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.
Document Outline
- Slide 1
- Slide 2
- Slide 3
- Slide 4
- Slide 5
- Slide 6
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- Slide 11
- Slide 12
- Slide 13
- Slide 14
- Slide 15
- Slide 16
- Slide 17
- Slide 18
- Slide 19
- Slide 20
- Slide 21
- Slide 22
- Slide 23
- Slide 24
- Slide 25
- Slide 26
- Slide 27
- Slide 28
- Slide 29
- Slide 30
- Slide 31
Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.
nechodím na prednášky