Olio-ohjelmointi 2016 Käyttöliittymä
n Javalla on helppo toteuttaa yksinkertainen graafinen käyttöliittymä n AWT/Swing n JFC (Java Foundation Collection) n AWT-sisältää Javan grafiikka GUI-komponmentit Layout-luokat (komponenttien sijoittelu) Tapahtumien käsittely java.awt.event Javalla 2
n AWT-komponentit periytyvät Component-luokasta Varsinaiset käyttöliittymäkomponentit n Button, Canvas, CheckBox, Choice, Label, List, Scrollbar, TextArea ja TextField n Container-luokat Voivat sisältää toisia AWT-komponentteja Window, alkeellinen ikkuna, jolla ei ole reunaviivaa, eikä siihen voi sijoittaa valikkoa Frame-luokka, sisältää reunaviivan, Java-sovelluksen pääikkuna Javalla 3
n Frame-ikkunaolion luonti import java.awt.*; public class IkkunaDemo_1 { public static void main(string [] args ){ Frame f = new Frame(" Ensimmainen ikkuna "); f.setsize(400, 300); //ikkunan koko f.setlocation(200,200); //paikka kuvaruudulla f.setvisible( true ); //ikkun näkyviin } } Javalla 4
n Ikkuna ei sisällä mitään toiminnallisuutta, ohjelma suljetaan painamalla Ctrl-c Javalla 5
n Komponenttien sijoittelumallit n Sijoittaminen tapahtuu add-metodilla n Container-oliolla on Layout Manager Sijoittelee komponentit ikkunaan sijoittelumallien mukaan FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout sekä kiintä sijoittelu FlowLayout on oletussijoitteluna Panel- ja Applet-luokila (komponentit peräkkäin vasemmalta oikealle) Sijoittelua voi muuttaa setlayout-metodilla Javalla 6
n Java Swing-käyttöliittymä n Käyttöliittymä komponentit johdetaan JComponentkomponentista import javax.swing.*; public class KaruIkkuna extends JFrame { public KaruIkkuna( ){ final int IKKUNAN_LEVEYS = 350; final int IKKUNAN_KORKEUS = 250; JFrame ikkuna = new JFrame(); ikkuna.settitle("aika karu ikkuna"); ikkuna.setsize( IKKUNAN_LEVEYS, IKKUNAN_KORKEUS ); ikkuna.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE ); ikkuna.setvisible( true ); } } Javalla 7
n Tapahtumien käsittely Hiirellä klikkaaminen Komentopainikkeen painaminen Hiiren liikkeet Näppäimen painaminen Ikkunan avaaminen/sulkeminen n Mahdolliselle tapahtumalle on ennakolta rekisteröity tapahtuman kuuntelija-olio n Tapahtuma syntyy tapahtumalähteessä n Tapahtuma-olion synnyttyä saa tapahtuman kuuntelijaolion tiedon Javalla 8
n Tapahtuma syntyy tapahtumalähteessä n Tapahtuma-olion synnyttyä saa tapahtuman kuuntelijaolion tiedon tapahtumasta (ns. callback) n Kuuntelijalla on metodi, joka suoritta tarvittavat toiminnot n Esimerkkiohjelma, jossa käyttäjältä kysytään maililukema ja ohjelma ilmoitta lukeman kilometreissä Javalla 9
import javax.swing.*; import java.awt.event.*; public class Ikkuna extends JFrame { private JPanel ruutu; private JLabel viestilabel1; private JTextField mailitkentta; private JButton laskenappula; private JButton lopetanappula; private final int IKKUNAN_LEVEYS = 310; private final int IKKUNAN_KORKEUS = 100; public Ikkuna( ){ settitle("mailit kilometreiksi muunnin"); setsize( IKKUNAN_LEVEYS, IKKUNAN_KORKEUS ); setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE ); rakennaruutu(); add( ruutu ); setvisible( true ); } Javalla 10
private void rakennaruutu(){ viestilabel1 = new JLabel("Anna etaisyys maileina: "); mailitkentta = new JTextField(10); laskenappula = new JButton("Laske"); laskenappula.addactionlistener( new NappulanKuuntelija()); lopetanappula = new JButton("LOPETA"); lopetanappula.addactionlistener( new NappulanKuuntelija()); ruutu = new JPanel(); ruutu.add( viestilabel1 ); ruutu.add( mailitkentta ); ruutu.add( laskenappula ); ruutu.add( lopetanappula ); } Javalla 11
private class NappulanKuuntelija implements ActionListener { public void actionperformed( ActionEvent e ){ String tapahtuma = e.getactioncommand(); if( tapahtuma.equals("laske")){ final double muunnosvakio = 1.609; String syote = null; double kilometrit; double mailit = 0; boolean ok = false; do{ try { syote = mailitkentta.gettext(); mailit = Double.parseDouble( syote ); ok = true; }catch(numberformatexception nfe ){ JOptionPane.showMessageDialog( null,"ei kelpaa yrita uudelleen "); mailitkentta.settext(""); return; } kilometrit = mailit * muunnosvakio; }while (ok); JOptionPane.showMessageDialog( null, syote+"mailia on"+kilometrit+"km"); mailitkentta.settext(""); } // if Javalla 12
if( tapahtuma.equals("lopeta")){ System.exit(0); } } } } n Main-metodi public class IkkunaOhjelmaMain_3 { public static void main( String [] args ){ Ikkuna iikkuna = new Ikkuna(); } } Javalla 13
n Käyttäjä syöttää luvun ja painnaa Laske-nappulaa Javalla 14
n Virhesyötteellä ohjema antaa virheilmoituksen Javalla 15