PPT

pr1j_11_swing.ppt

Formát
PPT
Veľkosť
609 kB
Pridané
Stiahnutí
410
Hodnotenie
3,0/5
Stiahnuť PPT · 609 kB

Preber 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.

Otvoriť AI: ChatGPT · Claude · Gemini

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


Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.