Java-ohjelmointi Opas ammattimaiseen osaamiseen Lisäosa: GUI © Jukka Harju, Jukka Juslin 1
© Jukka Harju, Jukka Juslin Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssillä. Lisäys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Java-ohjelmointi - tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin GUI Pohjatiedot Javan työasema GUI-tekniikat Swing GUI Layoutit SWT © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Pohjatiedot Pohjatietona tämän päivän asialle oletetaan Java AWT:n tuntemus Tapahtumankäsittelijät, sisäluokat Käyttöliittymäelementtien asemointi FlowLayoutin ja null- layotin avulla Pop-up ikkuna JOptionPane:n avulla Luokan periyttäminen Frame-luokasta © Jukka Harju, Jukka Juslin
Javan työasema GUI-tekniikat Java on valitettavasti varsinkin Suomessa tehty varsin marginaalisesti työasema GUI-käyttöliittymiä Syynä on esimerkiksi varsinkin ennen SWT-tekniikoita Javan hitaus käyttöliittymänä ja mahdottomuus tuottaa natiiviksi käännettyä nopeaa koodia, jota voisi tehdä visual editorilla Vallitseva väline työasema GUI:n tekemiseen Windows järjestelmiin on .NET Java on parhaimmillaan isoissa www-pohjaisissa Java EE järjestelmissä Käyttöliittymän tekemisen ja tapahtumaohjatun käyttöliittymän tekemiseen Java on kuitenkin pedagogisesti hyvä esimerkiksi selkeän API:nsa vuoksi – tästä on myöhemmin todella helppoa siirtyä esim. C# kieleen, jos kiinnostusta on © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Swing GUI Swing on nimi Java AWT:stä laajennetulle käyttöliittymäkirjastolle Seuraavalla kalvolla esitämme todennäköisesti yksinkertaisimman mahdollisen Java Swing sovelluksen © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Swing GUI Periytyy JFrame luokasta Kaikki lisättävä ContentPanen kautta Ikkunan sulkeminen Swingissä hoidetaan näin © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Swing GUI Edellisestä saadaan seuraavanlainen ikkuna: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Swing GUI Huomattavaa on, että tuttuihin elementteihin Button, Label, TextField on Swingissä lisättävä etuliite ”J” Elementit on kehitetty AWT:n pohjalta, mutta Swing-toteutusten (tehty Javalla) eteen on liitetty J-kirjain Swing luokat saadaan käyttöön importoimalla javax.swing.*; © Jukka Harju, Jukka Juslin
Sisältöpaneeli ContentPane Lisämutkana verrattuna AWT:hen on sisältöpaneeli ContentPane ContentPane saadaan JFramesta periytetystä luokasta kiinni getContentPane metodin avulla ContentPaneen saatetaan lisätä sisälläisia paneleita kuvaamaan käyttöliittymän eri osioita (JPanel-luokka) © Jukka Harju, Jukka Juslin
Swing GUI luokkien piirtäminen graafisesti Eclipseen on saatavissa lisäosa, jolloin graafiset ikkunat ovat maalattavissa (kuten MS Visual Studiossa) Lisäosan nimi on Visual Editor Pedagogisesti ei ole järkevää aloittaa Visual Editorista, sillä tällöin ymmärrys tapahtumankäsittelijöiden merkityksestä hämärtyy ja koodi on jokatapauksessa täysin ymmärrettävä – myöhemmin toki Visual Editor voi olla hyvä esimerkiksi null layoutilla käytettynä Visual Editor on ladattavissa esimerkiksi osoitteesta: http://myy.helia.fi/~jusju/ict02d/ICT02DOpiskelijanCD/85_eclipse_plugin s/VE-runtime-1.1.0.1.zip Paketti on purettava eclipsen plugins hakemiston alle oikein (zip- sisältää mm. plugins hakemiston) Linkin antama ohjelmisto on valitettavasti vanha versio, joka toimii vain Eclipse 3.1:n kanssa – etsi vastaavasta tiedostosta uudempi versio jos haluat kokeilla Eclipse 3.2:n kanssa © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Layoutit Swingissä on käytettävissä useita eri Layouteja Voit tutustua niihin API:sta Layoutien käyttö on monesti haastavaa (muiden kuin FlowLayoutin) sillä on vaikea sanoa mihin elementti loppujenlopuksi asettuu Asemointi on luonnollisesti tietysti tärkeää ja yksi hyvä Layout siihen on GridBagLayout, kyseinen Layout on vain valitettavan vaikea käsin koodata Toinen vaihtoehto olisi null-layout, mutta sekin vaatii tiedon kohdenäytön resoluutiosta (mieluiten) ja Visual Editorin Harjoituksissa käytetään FlowLayoutia © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT SWT on Javan uusin (ei vakio) käyttöliittymämekanismi SWT on nopea, esimerkiksi Eclipse on tehty SWT:llä SWT:stä on kullekin käyttöjärjestelmälle oma jakelupakettinsa, joten se ei ole alustariippumaton kuten Java-sovellukset yleensä teoriassa Seuraavassa esimerkki SWT-sovelluksesta © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT Importit ja main-metodi on esitetty omalla kalvollaan, vaadittu createSShell metodi taas omalla kalvollaan: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT SWT:n vaatimat importit © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT Asettelut © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT - tulos Edellisestä ohjelmasta saadaan seuraavanlainen käyttöliittymä: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin SWT SWT:stä voisi kätevästi käyttää esimerkiksi Java 6:n uutta SystemTray-luokkaa SystemTray asettaa ohjelman työpöydän SystemTrayhyn, johon olisi kätevä laittaa vaikka omatekemä BackUp ohjelmisto (Eclipsen mukana tulee esim. ssh yhteydet tarjoava jsch) © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Visual Editor Visual Editoria voidaan käyttää luokkaa tehdessä jos edellämainittu plugin on asennettu Valitaan New/Other/Java/Visual Class: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Visual Editor Visual Editorin työpöytä valinnan ”Visual Class” jälkeen näyttää tältä: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Visual Editor Muista pinnata © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Visual Editor JFrame © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin JFrame JFrame © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin JFrame JFramen asettelua © Jukka Harju, Jukka Juslin
JFrame esimerkkikoodia Esimerkki-ikkuna: http://myy.helia.fi/~jusju/ohjelmointitaito/FrLaskutus.java Muista null-layout © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin JFrame Snap-To-Grid: © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin JFrame Properties JFrame Properties ikkuna © Jukka Harju, Jukka Juslin