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ä

Graafinen käyttöliittymä, osa 2

JAVA-OHJELMOINTI 3 op A274615

Osio 4: Graafinen käyttöliittymä

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Graafinen käyttöliittymä, osa 1

Osio 4: Graafinen käyttöliittymä

Graafinen käyttöliittymä, osa 3

Olio-ohjelmointi Käyttöliittymä

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

Graafisen käyttöliittymän ohjelmointi

Java ja grafiikka. Ville Sundberg

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Eclipse & WindowBuilder

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Microsoft Visual Studio 2005

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmoinnin perusteet Y Python

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Tapahtumapohjainen ohjelmointi

Rajapinta (interface)

Ohjelmoinnin peruskurssien laaja oppimäärä

Javan GUI Scratchaajalle

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Luokat ja oliot. Ville Sundberg

Lomakkeiden suunnittelu. Aiheina

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

Mikä yhteyssuhde on?

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

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

Lomakkeiden suunnittelu. Aiheina

C# Windows ohjelmointi perusopas

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

Java kahdessa tunnissa. Jyry Suvilehto

Harjoitustyö (TKO_2023)

Ohjelmoinnin perusteet Y Python

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

Olio-ohjelmointi Javalla

Lomakkeiden suunnittelu. Aiheina

Ohjelmointi 5: Miinaharava

Harjoitus 2: Oppijan aktivointi ( )

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

T Henkilökohtainen harjoitus: FASTAXON

JUnit ja EasyMock (TilaustenKäsittely)

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Vesisika. metsiemme työmyyrä.

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

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

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

Javan GUI Scratchaajalle

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

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

Tekstinkäsittelyn jatko Error! Use the Home tab to apply Otsikko 1 to the text that you want to appear here. KSAO Liiketalous 1

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

14. Hyvä ohjelmointitapa 14.1

Ohjelmoinnin jatkokurssi, kurssikoe

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Lupa opetuskäyttöön pyydettävä. Näppäimistö. Kohdistimen ohjausnäppäimistö. Funktionäppäimistö. Kirjoitusnäppäimistö

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

Web Services tietokantaohjelmoinnin perusteet

Ohjelmointi 2 / 2010 Välikoe / 26.3

13. Hyvä ohjelmointitapa (osa 1) 13.1

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

5 Näppäimistö. 5.1 Näppäimistön eventit

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

Jypelin käyttöohjeet» Ruutukentän luominen

Tilastokeskuksen rajapintapalveluiden käyttöönotto ArcGISohjelmistossa

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

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

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

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

KOHDELUOKAN MÄÄRITTELY

Listarakenne (ArrayList-luokka)

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Kehyspohjainen ohjelmistokehitys

Metodien tekeminen Javalla

Dialogit. Juha Järvensivu 2008

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

Javan perusteita. Janne Käki

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Java Swing. Juha Järvensivu 2007

Sisältö. 2. Taulukot. Yleistä. Yleistä

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

OpeOodi Opiskelijalistojen tulostaminen, opiskelijoiden hallinta ja sähköpostin lähettäminen

7. Oliot ja viitteet 7.1

SiteAdmin.

Taulukot. Jukka Harju, Jukka Juslin

NUUO ETÄOHJELMA PIKAOPAS. Maahantuoja Dasys Oy Kaivolahdenkatu HELSINKI helpdesk@dasys.fi

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

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ä