Osio 4: Graafinen käyttöliittymä



Samankaltaiset tiedostot
Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

JAVA-OHJELMOINTI 3 op A274615

Osio 4: Graafinen käyttöliittymä

Graafinen käyttöliittymä, osa 2

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Olio-ohjelmointi Käyttöliittymä

Graafinen käyttöliittymä, osa 3

Osio 4: Graafinen käyttöliittymä

HELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Java ja grafiikka. Ville Sundberg

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Graafinen käyttöliittymä, osa 1

Ohjelmoinnin perusteet Y Python

Graafisen käyttöliittymän ohjelmointi

Tapahtumapohjainen ohjelmointi

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

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

Ohjelmoinnin perusteet Y Python

Eclipse & WindowBuilder

Rajapinta (interface)

Harjoitus 2: Oppijan aktivointi ( )

Olio-ohjelmointi Javalla

Javan GUI Scratchaajalle

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Harjoitustyö (TKO_2023)

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Microsoft Visual Studio 2005

Mikä yhteyssuhde on?

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

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

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

Web Services tietokantaohjelmoinnin perusteet

C# Windows ohjelmointi perusopas

Lomakkeiden suunnittelu. Aiheina

Javan GUI Scratchaajalle

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin peruskurssien laaja oppimäärä

Java kahdessa tunnissa. Jyry Suvilehto

Harjoitustehtävät ja ratkaisut viikolle 48

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

JUnit ja EasyMock (TilaustenKäsittely)

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Lomakkeiden suunnittelu. Aiheina

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

2016/07/05 08:58 1/12 Shortcut Menut

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

15. Ohjelmoinnin tekniikkaa 15.1

Wilman käyttöohje huoltajille

Interaktiivinen tarinankerronta

Lomakkeiden suunnittelu. Aiheina

13. Hyvä ohjelmointitapa (osa 1) 13.1

Vesisika. metsiemme työmyyrä.

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Listarakenne (ArrayList-luokka)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

LUKU 17 MUUTAMIA JAVA FX -SOVELLUKSIA. Tässä dokumentissa esitellään muutamia Java FX -sovelluksia.

UML ja luokkien väliset suhteet

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

1 Tehtävän kuvaus ja analysointi

Taulukot. Jukka Harju, Jukka Juslin

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

14. Hyvä ohjelmointitapa 14.1

Ohjelmoinnin perusteet Y Python

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

Testivetoinen ohjelmistokehitys

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Kehyspohjainen ohjelmistokehitys

Metodien tekeminen Javalla

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Tikon Web-sovellukset

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

Jypelin käyttöohjeet» Ruutukentän luominen

Tavallisen videomainoksen sijasta Ruudussa voidaan mainostauolla esittää dynaamisia spotteja.

Tapahtumat. Johdanto Ikkunointi Ikkunatapahtumat Päätapahtumasilmukka Tapahtumien käsittely Olioiden välinen kommunikointi.

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

T Henkilökohtainen harjoitus: FASTAXON

Käyttöohje. Energent MagiCAD plugin

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

7. Oliot ja viitteet 7.1

Javan GUI Scratchaajalle

Ohjelmoinnin peruskurssi Y1

Pakkauksen kokoaminen

Luokat ja oliot. Ville Sundberg

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Transkriptio:

Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli (panel) muuttumattoman tekstin esittäminen tekstitiedon esittäminen ja sen muuttaminen käyttäjän toimesta sovelluksen toiminnon aktivointi käyttäjä voi valita syöttötiedon alasvetovalikosta tai kirjoittaa sen ruutuun näytöllä oleva alue, jossa voidaan esittää muita käyttöliittymäkomponentteja

Javan Swing-tekniikan perusteet Swing-tekniikan GUI-komponentteihin liittyy kolme peruskäsitettä: komponentit (components) tapahtumat (events) kuuntelijat (listeners)

Javan Swing-tekniikan perusteet Javan tapahtumankäsittely perustuu Observer design pattern malliin observer = tarkkailija design pattern = suunnittelumalli Suunnittelumalli on toteutustapa, jota voidaan soveltaa uudelleen saman tyyppisen ongelman ratkaisuun

Javan Swing-tekniikan perusteet Observer design pattern tapahtumien lähde-objektissa tapahtuu muutoksia joukko tarkkailijoita seuraa tapahtuvia muutoksia lähde-objekti ei vastaa tarkkailijoiden aktivoinnista lähde-objekti sisältää listan, johon muutoksista kiinnostuneet voivat listautua listautuneet tarkkailijat voivat kuunnella tapahtuneita muutoksia tarkkailija liittää haluamansa muutoksen kuuntelijaan tarvittavan toiminnallisuuden

Lähde-objekti Tapahtuma deregister register notify Kuuntelija Tarkkailija Kuuntelija Tarkkailija

Javan Swing-tekniikan perusteet Tapahtuma (event) on objekti, joka kuvaa jotakin käyttäjän tekemää toimenpidettä hiirtä siirretään (mouse move) hiirtä raahataan (mouse drag) hiiren painiketta painetaan (a mouse button is clicked) näppäimistöltä näppäillään merkki (a keyboard key is pressed) ajastimen aika päättyy (a timer expires)

Javan Swing-tekniikan perusteet Tapahtumiin liittyy kolme peruskäsitettä (itse asiassa olioita): Tapahtuma itse (event) Tapahtuman lähde (event source) Tapahtuman kuuntelija (event listener)

Javan Swing-tekniikan perusteet Tapahtuma itse (event) luodaan Lähde-objektin yhteydessä on objekti, joka periytetään java.util paketin EventObject-luokasta kuvaa tapahtunutta tapahtumaa

Javan Swing-tekniikan perusteet Tapahtuman kuuntelija (event listener) on objekti, jonka rajapinta periytetään java.util paketin EventListenerrajapinnasta rekisteröityy kuuntelijaksi tapahtuman lähde-objektille

Javan Swing-tekniikan perusteet Tapahtuman lähde (event source) ylläpitää listaa tapahtuman kuuntelijoista listaan rekisteröidytään addlistener-metodilla ja siitä poistutaan removelistener-metodilla lähde luo event-objektin ilmentymän lähde ilmoittaa kullekin listan kuuntelijalle tapahtumasta notify-metodilla notify-metodi sisältää parametrinaan viitteen event-objektiin

Javan Swing-tekniikan perusteet Tapahtumiin voi liittyä eri tyyppisiä kuuntelijoita: Käyttäjä näpäyttää komentopainiketta, painaa Return-näppäintä kirjoittaessaan muokkausruutuun tai valitsee menu-valikosta toiminnon Käyttäjä sulkee ikkunan ActionListener WindowListener Käyttäjä näpäyttää hiirtä komponentin päällä Käyttäjä siirtää kohdistimen komponentin päälle Komponentti tulee näkyväksi Komponentti saa fokuksen Taulun tai listan valinnan muuttuminen MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener

Javan Swing-tekniikan perusteet Käyttäjän toimenpide Komponentti Event Komentopainikkeen painaminen JButton ActionEvent Tekstin muuttaminen JTextComponent TextEvent Lista-alkion kaksoisnäpäytys JList ActionEvent Alkion valinta näpäyttämällä kerran JList ItemEvent Alkion valinta tai valinnan poisto JComboBox ItemEvent

Event-objekti Laukaisee tapahtuman (event) Kohdekomponentti Kuuntelija Listener Aktivoi Tapahtumankäsittelijä

Kuuntelija voidaan toteuttaa tähän tapaan: tallennajbutton = new JButton ("Tallenna"); tallennalistener = new tallennalistenerclass(); tallennajbutton.addactionlistener(tallennalistener); class tallennalistenerclass implements ActionListener { public void actionperformed (ActionEvent e) { // tähän tulee toiminnallisuus } );

Kuuntelija voidaan toteuttaa anonyymina sisäluokkana (anonymous inner class) tähän tapaan: tallennajbutton = new JButton ("Tallenna"); tallennajbutton.addactionlistener( new ActionListener () { public void actionperformed ( ActionEvent event) { // tähän tulee toiminnallisuus } );

Mikä olikaan anonyymi sisäluokka? erikoistapaus luokan määrittelystä luokka määritellään ilman nimeä (tästä sana anonymous) luokan määrittely esiintyy tyypillisesti metodin sisällä (tästä sana inner) koska luokalla ei ole nimeä, on yksi objekti luotava välittömästi määrittelyn yhteydessä seuraus: kullakin kontrollilla on oma kuuntelija

Vaihtoehtoinen tapa: public class ButtonDemo extends JFrame implements ActionListener { public ButtonDemo () {. JButton tallennajbutton = new JButton ( Tallenna ); tallennajbutton.addactionlistener(this); JButton poistajbutton = new JButton ( Poista ); poistajbutton.addactionlistener(this); } public void actionperformed (ActionEvent e) { if (e.getactioncommand().equals( Tallenna )) // tallennatoiminta ; else if (e.getactioncommand().equals( Poista )) // poistatoiminta ; else //virhetoiminta ; } }

Erona anonyymiin sisäluokkaan: nyt painikkeilla on yhteinen kuuntelija molemmat painikkeet aktivoivat saman kuuntelijan tapahtumaobjektista selviää, kumpi painike on kuuntelijan aktivoinut sen mukaan valitaan toiminta huomaa, että kontrollista ja käyttäjän toimenpiteestä riippuu tapahtuma, joka aktivoituu

Kumpaa kuuntelijatyyppiä kannattaa käyttää? Tässä tapauksessa tavoitteena on yhdistää usean eri tekijän osakokonaisuuksien toiminnallisuus samaan ikkunaan Silloin on parempi käyttää anonyymiä sisäluokkaa, jolloin jokaisella kontrollilla on oma kuuntelija Yhdistäminen on helppoa mutta ikkunan koodi pitenee Yleisessä tilanteessa vertailu ei ole näin helppo

Toiminnallisen eheyden käsite esimerkissämme sama toiminto voidaan aktivoida sekä valikkoriviltä että komentopainikkeesta kummallakin kontrollilla on oma kuuntelija kuuntelijoiden tulee aktivoida sama toiminta (toteutettuna esim. luokan sisäisenä metodina) ilman ylimääräisiä toimenpiteitä metodissa toteutetaan se toiminnallisuus, joka toimintoon halutaan liittää seuraus: kumpikin toiminnon aktivointitapa johtaa täsmälleen samaan suoritukseen seuraus: käyttäjän oppimista tuetaan

Javan Swing-tekniikan perusteet Miten viikon 4 ryhmäharjoitustehtävä kannattaa toteuttaa: Otetaan lähtökohdaksi edellisellä viikolla toteutettu osasovellus Lisätään sovellukseen kuuntelijat anonyymina sisäluokkana Toteutetaan jokaiseen kuuntelijaan sanomaikkuna, joka kertoo aktivoidun komennon nimen Testataan osasovellus Kootaan testatuista osasovelluksista toimiva ikkuna Lisätään ikkunaan kutakin toimintoa vastaava metodi Aktivoidaan ko. metodi sekä valikkorivin toiminnosta että komentopainikkeen toiminnosta Testataan toteutus

Javan Swing-tekniikan perusteet Miten viikon 4 ryhmäharjoitustehtävä voi laajentaa Etsitään arkistoista tosite-luokan toteutus Liitetään tosite-luokan toteutus sovellukseen niin, että uuden tositteen tiedot saadaan ikkunasta Tallenna-toiminnon painamisen jälkeen Talletetaan ikkunan tiedot tosite-luokkaan sen metodien avulla Tarkistetaan tietojen kelvollisuus. Tähän olisi hyvä olla metodi tositeluokassa Jos tiedot kelpaavat, tuodaan siitä viesti käyttäjälle Testataan toteutus Toteutuksen onnistuessa saadaan hyvä arvosana

Keskusteluikkunan (Dialog window) toteuttaminen Keskusteluikkuna voidaan toteuttaa kahdella vaihtoehtoisella tavalla käytetään JDialog-luokkaa, jolloin dialogi-ikkuna kiinnitetään vastaavaan JFrame-ikkunaan käytetään JFrame-luokkaa, jolloin toteuttajan on muunnettava ikkunan käyttöliittymä otsikkorivin komentopainikkeiden osalta (ei suositeltavaa)

JDialog-luokka muodostin vaatii sen ikkunan kahvan, johon dialogi-ikkuna liittyy tuhoamalla ikkuna tuhoutuu myös siitä riippuva dialogi-ikkuna dialogi-ikkuna modaalisuus voidaan valita modaalinen dialogi-ikkuna on pakko käsitellä ennen muita ikkunoita modaaliton muiden ikkunoiden samanaikainen käsittely onnistuu (harvinaisempi tapaus) Swingissä on valmiita dialogi-ikkunoita: JFileChooser JColorChooser jne.

Dialogin toteuttaminen JFrame-luokan avulla asiakirjaikkuna kutsuu dialogi-ikkunaa kutsun yhteydessä päätetään myös modaalisuudesta (sopimuskysymys) dialogi-ikkunan riippuvuus asiakirjaikkunaan syntyy vasta kutsuhetkellä dialogi-ikkuna voidaan liittää useampaankin asiakirjaikkunaan

Työn iloa! Osio 4: Graafinen käyttöliittymä