GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Samankaltaiset tiedostot
Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Olio-ohjelmointi Käyttöliittymä

JAVA-OHJELMOINTI 3 op A274615

Graafinen käyttöliittymä, osa 2

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Graafinen käyttöliittymä, osa 1

Ikkunointijärjestelmät

Java ja grafiikka. Ville Sundberg

Graafinen käyttöliittymä, osa 3

Luento 5. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Java layoutit. Juha Järvensivu 2007

Java Swing. Juha Järvensivu 2008

Java Swing. Juha Järvensivu 2007

Ohjelmoinnin peruskurssien laaja oppimäärä

Rajapinta (interface)

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Eclipse & WindowBuilder

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

JAVA-OHJELMOINTI 3 op A274615

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Graafisen käyttöliittymän ohjelmointi

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Mikä yhteyssuhde on?

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Graafisen käyttöliittymän automaattinen testaus

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Oliosuuntautuneita apletteja

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Javan GUI Scratchaajalle

Java UI-komponentit (JTable) Juha Järvensivu 2007

Tietorakenteet, laskuharjoitus 7,

Metodien tekeminen Javalla

Ohjelmointi 2 / 2010 Välikoe / 26.3

Tapahtumapohjainen ohjelmointi

Javan GUI Scratchaajalle

Alkuehdot. Motivointi (1/2) Ohjelmointi II, kevät 2004 Kuopion yliopisto. Motivointi (2/2) (C) Mauno Rönkkö. Mitä tekee kutsupieninalkio(t, 10)?

Poikkeusten ja tapahtumien käsittely

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Olio-ohjelmointi Javalla

Ohjelmointi 5: Miinaharava

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

4. Luokan testaus ja käyttö olion kautta 4.1

1 Tehtävän kuvaus ja analysointi

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmoinnin jatkokurssi, kurssikoe

Luokat ja oliot. Ville Sundberg

Sovelmat. Janne Käki

Javan perusteita. Janne Käki

Listarakenne (ArrayList-luokka)

Javan GUI Scratchaajalle

Javan GUI Scratchaajalle

Taulukoiden käsittely Javalla

9. Periytyminen Javassa 9.1

Pakkauksen kokoaminen

Ohjelmoinnin perusteet Y Python

YHTEYSSUHDE (assosiation)

5. HelloWorld-ohjelma 5.1

<applet code="simpleaudioapplet.class" width=300 height=300>

Tietokantarakenteet, k2011 Niemistö, Jesse; m Viitanen, Lauri; Drinkkitietokanta

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Java-API, rajapinnat, poikkeukset, UML,...

8. Näppäimistöltä lukeminen 8.1

HSMT TCP- ja UDP-soketeista

815338A Ohjelmointikielten periaatteet

Pakkauksen kokoaminen

1. Omat operaatiot 1.1

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

5. HelloWorld-ohjelma 5.1

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

14. Poikkeukset 14.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Johdanto. Luku 1. jälkeen. Lähes kaikki nykyisin Unix-tyyppisten käyttöjärjestelmien päällä ajettavat graafiset käyttöliittymät pohjautuvat

14. Poikkeukset 14.1

16. Javan omat luokat 16.1

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

8. Näppäimistöltä lukeminen 8.1

Harjoitustyö (TKO_2023)

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

9. Periytyminen Javassa 9.1

Java kahdessa tunnissa. Jyry Suvilehto

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

1. Olio-ohjelmointi 1.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmoinnin peruskurssien laaja oppimäärä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Transkriptio:

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING Käyttöliittymäkomponentteja Sovelluksen pääikkunan luominen Rinnakkainen toiminnallisuus Miten käyttöliittymä lopetetaan? Ikkunan peruskomponentit Mihin kohtaan ikkunaa komponentti laitetaan? Paneelit (JPanel) Käyttöliittymätapahtumien käsittely Tapahtumaohjattu ohjelmointi Tapahtuman kuuntelijaluokat

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING Java-ohjelman graafinen käyttöliittymä (Graphical User Interface, GUI) voidaan toteuttaa käyttämällä AWT (Abstract Windowing Toolkit) -luokkakirjastoa Swing-luokkakirjastoa edellisten yhdistelmää Sovellus (Application) käyttöjärjestelmän alla suoritettava ohjelma Sovelma (Applet) www-sivuilla suoritettava ohjelma

Käyttöliittymäkomponentteja JButton JFrame JLabel JTextField

JFrame-luokan periytyminen Object Kaikkien Java-luokkien yläluokka Component +setsize() +setlocation() +setbounds() +setbackground() +setforeground() +setvisible() Komponentin koko Komponentin sijainti Komponentin sijainti ja koko Komponentin taustaväri Komponentin etualanväri Näyttää/piilottaa komponentin Container +add() +setlayout() Lisää komponentin säilöön Asettaa sijoittelumanagerin

JFrame-luokan peritytyminen jatkuu : Container Panel +add() +setlayout() Window +addwindowlistener() Kehyksetön ikkuna Tapahtumakuuntelijan kytky Dialog Frame -settitle Ikkuna, jossa on kehykset ja otsikkopalkki JFrame +getcontentpane()

Paketti javax.swing sisältää mm. seuraavia luokkia: JFame JDialog JPanel kehystetty ikkuna dialogi ikkuna paneeli JButton JTextField JLabel JTextArea painike tekstikenttä otsikkoteksti tekstialue JCheckBox, JCheckBoxMenuItem JRadioButton, JRadioButtonMenuItem, JComboBox, JList valintaruutu, valinta valintaruutu valinta valintalista, luettelo JMenuBar, JMenu, JMenuItem JScrollBar valikon paikka, valikko valikkorivi vierityspalkki

Component Luokkien JPanel, JLabel, JTextField, JTexArea ja JButton periytyminen: JComponent : JPanel JLabel AbstractButton +JPanel() +JPanel (LayoutManager mgr)() +JLabel() +settext(string s)() +addactionlistener() JTextComponent JButton +settext() +gettext() +seteditable() +JButton(String s)() JTextArea JTextField +JTextArea (int col, int row)() +append() +JTextFiled() +JTextField (int col)()

Sovelluksen pääikkunan luominen import javax.swing.*; import java.awt.*; import java.awt.event.*; Import-lauseet, jotta voidaan käyttää olemassa olevia komponentteja } public class FrIkkuna extends JFrame { } public FrIkkuna() { // ikkunan otsikko settitle("esimerkki-ikkuna"); // ikkunan koko setsize(200, 150); // ikkunan sijainti setlocation(100, 100); public static void main(string[] args) { } FrIkkuna fr = new FrIkkuna(); fr.setvisible(true); FrIkkuna periytetään JFrame-luokasta Tuo ikkuna näkyviin

Sovelluksen luoma ikkuna: :

Rinnakkainen toiminnallisuus graafista käyttöliittymää käsittelevä Java-ohjelma on monisäikeinen (Multithreading) säie (Thread) oma kontrolli oma ohjelmakohta Syntyy pääsäie Esim. public static void main(string[] args) { } FrIkkuna fr = new FrIkkuna(); fr.setvisible(true); Syntyy itsenäinen käyttöliittymäsäie, joka huolehtii ikkunasta

Miten käyttöliittymä lopetetaan? mikäli Java-sovellus on tuonut näkyviin yhdenkään ikkunan sen suoritus täytyy lopettaa System.exit(0) metodin kutsulla kun pääikkuna suljetaan, yleensä halutaan että koko sovellus päättyy laitetaan pääikkunan muodostimeen lause setdefaultcloseoperation(jframe.exit_on_close) ko. lause suorittaa System.exit-lauseen, kun käyttäjä painaa ikkuna sulkemisruutua

Esim. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class FrIkkuna extends JFrame { public FrIkkuna() { } // ikkunan otsikko settitle("esimerkki-ikkuna"); // ikkunan koko setsize(200, 150); // ikkunan sijainti setlocation(100, 100); setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] args) { } FrIkkuna fr = new FrIkkuna(); fr.setvisible(true); }

IKKUNAN PERUSKOMPONENTIT Komponenttien määrittely JButton btlopeta = new JButton ( Lopeta ); JLabel lbetunimi = new JLabel ( Etunimi: ); JTextField tfetunimi = new JTextField ( 10 ); Komponenttien sijoittelu ikkunaan Komponentit lisätään ikkunaan Container-olion add-metodilla: Esim. Container sisalto = this.getcontentpane(); sisalto.add(komponentti);

Mihin kohtaan ikkunaa komponentti laitetaan? A) Käytetään sijoittelumanageria: FlowLayout sijoittelumanageri: Container sisalto = this.getcontentpane(); sisalto.setlayout (new FlowLayout( ) ); tasaustapa CENTER (oletus), LEFT tai RIGHT Ks. FrSijoittuEsim1.java

Mihin kohtaan ikkunaa komponentti laitetaan jatkuu BorderLayout sijoittelumanageri: pyrkii järjestämään komponentit viiteen erilliseen maantieteelliseen lokeroon: NORTH, WEST, CENTER, EAST, SOUTH Ks. FrSijoittuEsim2.java

GridLayout sijoittelumanageri Mihin kohtaan ikkunaa komponentti laitetaan jatkuu jakaa ikkunan ruudukoksi, jossa kaikki ruudut ovat samankokoisia esim. Container sisalto = this.getcontentpane(); sisalto.setlayout (new GridLayout(2,2)) ==> Container sisalto = this.getcontentpane(); sisalto.setlayout (new GridLayout(0,3)) ==> Ks. FrSijoitteluEsim3.java

B) Sijoitetaan komponentit itse: Komponenttien sijoittelu Mihin kohtaan ikkunaa komponentti laitetaan jatkuu xy-koordinaatisto, siten ettö origo (nollapiste) on alueen vasemmassa ylälaidassa 0,0 x-akseli y- a k s e l i koordinaattiyksikkö on pikseli (pixel) koordinaatiston koko riippuu näytön tarkkuudesta (640x480, 800x600, 1280x1024)

Mihin kohtaan ikkunaa komponentti laitetaan jatkuu sijoittelumalli otetaan poispäältä: Container sisalto = this.getcontentpane(); sisalto.setlayout (null); komponenttien sijainti ja koko asetetaan btkeltainen.setlocation( 45, 50); // (x,y) btkeltainen.setsize ( 70, 25 ); // (leveys,korkeus) // tai (x, y, leveys, korkeus) btkeltainen.setbounds (45, 50, 70, 25); Ks. SijoitteluEsim4.java

Paneelit (JPanel) Usein on tarpeen jakaa näyttö useaan osaan ja sijoittaa kuhunkin osaan tietyt komponentit tietyssä järjestyksessä. Tällöin käytetään apuna paneelielementtiä edustavaa luokkaa JPanel Ensin sijoitetaan näytön sijoittelumanagerin avulla kaikki paneelit näyttöön Sitten määritellään jokaiselle paneelikomponentille oma sijoittelumanagerinsa (ei pakko) ja sijoitetaan jokaisen paneeliin sinne kuuluvat komponentit Ks. FrJPanel.java

Käyttöliittymätapahtumien käsittely Tapahtumaohjattu ohjelmointi (event driven programming): ohjelman suorituksen kontrolli on käyttöliittymässä käyttäjän toimenpiteet (ikkunan sulkeminen, painikkeen painaminen yms.) huomioi ajonaikainen järjestelmä ja välittää näistä tiedot TAPAHTUMINA sovellukselle

Tapahtumaohjattu ohjelmointi Käyttäjän toimenpide aiheuttaa tapahtuman Komponenttiolio kutsuu tapahtumaan kytketyn kuuntelijaolion tiettyä metodia Tapahtuman käsittelymetodi käyttöliittymäkomponenttiolio Tapahtuma kuuntelijaolio

Tapahtumaohjattu ohjelmointi Käyttöliittymäkomponenttiin on ensin kytkettävä tapahtumakuuntelija olio Kytkentää riippuu komponentin luokasta Esim. painikkeeseen kytketään tapahtumakuuntelija addactionlistetener-metodilla Esim. btlisaa.addactionlistener(new AlsLisaa()); Parametriksi luodaan tapahtumakuuntelijaolio

Tapahtuman kuuntelijaluokat käyttöliittymätapahtuman käsittely tehdään tapahtuman kuuntelijaluokassa esim. painikkeeseen kytketyn kuuntelijaluokan on luvattava, että se toteuttaa ActionListener-rajapinnan class AlsLisaa implements ActionListener { } Kun luokka lupaa toteuttaa ActionListener-rajapinnan luokan on sisällettävä seuraavan muotoinen actionperformedmetodi: public void actionperformed(actionevent e) { // tähän tulee koodi, // jolla reagoidaan tapahtumaan }

Esim. public class FrLaskuri1 extends JFrame {... private void asettelekomponentit() { btlisaa.addactionlistener ( new AlsLisaa () ); } class AlsLisaa implements ActionListener { public void actionperformed (ActionEvent e) { int lkm = Integer.parseInt(tfLaskuri.getText()); lkm++; } } tflaskuri.settext(""+lkm);

Kuuntelijaluokan toteutus sisäluokkana (inner class) eli kuuntelijaluokka määritellään toisen luokan sisällä Ympäröivä olio omistaa sisäluokan olion sisäluokan olio voi käsitellä ympäröivän luokan yksityisiä tietoja ja kutsua ympäröivän luokan metodeja sisäluokat eivät näy ympäröivän luokan ulkopuolelle käytetään yleensä vain tapahtuman kuuntelijoiden ohjelmoinnissa