JAVA-OHJELMOINTI 3 op A274615



Samankaltaiset tiedostot
Java Swing. Juha Järvensivu 2007

Java Swing. Juha Järvensivu 2008

Olio-ohjelmointi Käyttöliittymä

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Java ja grafiikka. Ville Sundberg

Ikkunointijärjestelmät

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

Graafinen käyttöliittymä, osa 2

Osio 4: Graafinen käyttöliittymä

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

Mikä yhteyssuhde on?

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

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

JAVA-OHJELMOINTI 3 op A274615

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisuus. Juha Järvensivu 2008

Ohjelmoinnin peruskurssien laaja oppimäärä

Graafinen käyttöliittymä, osa 3

Osio 4: Graafinen käyttöliittymä

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Graafisen käyttöliittymän automaattinen testaus

Rajapinta (interface)

Listarakenne (ArrayList-luokka)

Metodien tekeminen Javalla

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

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Olio-ohjelmointi Javalla

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

1 Tehtävän kuvaus ja analysointi

Ohjelmointi 2 / 2010 Välikoe / 26.3

Eclipse & WindowBuilder

Luokat ja oliot. Ville Sundberg

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

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Luokan sisällä on lista

YHTEYSSUHDE (assosiation)

Ohjelmoinnin jatkokurssi, kurssikoe

Taulukoiden käsittely Javalla

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

Tietokannat II -kurssin harjoitustyö

Rinnakkaisohjelmointi, Syksy 2006

public static void main (String [] args)

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Java layoutit. Juha Järvensivu 2007

Oliosuuntautuneita apletteja

Javan GUI Scratchaajalle

Javan GUI Scratchaajalle

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

Poikkeusten ja tapahtumien käsittely

9. Periytyminen Javassa 9.1

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

7. Näytölle tulostaminen 7.1

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

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

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

Tietorakenteet, laskuharjoitus 7,

Javan perusteita. Janne Käki

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

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

Javan GUI Scratchaajalle

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

16. Javan omat luokat 16.1

Periytyminen (inheritance)

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Poikkeustenkäsittely

OLIO-OHJELMOINTI Object programming versio:

9. Periytyminen Javassa 9.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

5. HelloWorld-ohjelma 5.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Lista luokan sisällä

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

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

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

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

Ohjelmistotekniikan menetelmät, koe

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

Olio-ohjelmointi Virhetilanteiden käsittely

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

14. Poikkeukset 14.1

Sovelmat. Janne Käki

Graafisen käyttöliittymän ohjelmointi

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

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

Transkriptio:

JAVA-OHJELMOINTI 3 op A274615 JFC & Swing, Look & Feel, Events Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi, 2004. JFC Java Foundation Classes JFC sisältää Swing GUI komponentit Look&Feel tuki Accessibility API helppokäyttöisyyden tuki (braillepistekirjoitus, screen reader) Java 2D API Drag&Drop tuki Kansainvälistäminen (Internationalization)

Swing-komponentit Swing API mukaan Java 2:ssa (jdk 1.2 ) Pakkaukset: javax.swing.* Kaikki Swing-komponentit alkavat (pääsääntöisesti) J-kirjaimella Komponentteja on paljon Periytyvät AWT-komponenteista Swing- ja AWT-komponentteja ei saa käyttää sekaisin Swing-komponentit Korkean tason säiliöt JApplet, JDialog, JFrame Yleiskäyttöiset säiliöt JPanel, JScrollPane, JSplitPane, JTabbedPane, JToolBar Erikoiskäyttöiset säiliöt JInternalFrame, JLayeredPane, JRootPane

Swing-komponentit Peruskontrollit JButton, JComboBox, JList, JMenu, JSlider, JSpinner, JTextField, JFormattedTextField, Informaation näyttöön tarkoitetut: JLabel, JProgressBar, JToolTip Interaktiiviset formatoidun tiedon näyttöön: JColorChooser, JFileChooser, JTable, JText, JTree Sunin Java-sivuilta löytyy visual index: http://java.sun.com/docs/books/tutorial/uiswing/components/components.html Yksinkertainen Swing-ohjelma HelloWorldSwing.java: import javax.swing.*; public class HelloWorldSwing { public HelloWorldSwing(){ // Luodaan pääikkuna. JFrame frame = new JFrame("HelloWorldSwing"); // Tehdään label, johon teksti laitetaan. JLabel label = new JLabel("Hello World"); // Lisätään label frameen. frame.getcontentpane().add(label); // Ikkunan sulkeutuessa ohjelma lopetetaan. frame.setdefaultcloseoperation(jframe.exit_on_close); // Pakataan frame ja laitetaan näkyviin. frame.pack(); frame.setvisible(true); public static void main(string[] args){ // Luodaan instanssi. HelloWorldSwing hws = new HelloWorldSwing(); pack()-metodin tilalla voisi käyttää myös setsize()-metodia. pack() on kuitenkin suositeltavampi, sillä se jättää vastuun koon määrittämisestä layout-managerille.

Yksinkertainen Swing-ohjelma säikeillä HelloWorldSwingTS.java: import javax.swing.*; public class HelloWorldSwingTS { private static void createandshowgui(){ // Luodaan pääikkuna. JFrame frame = new JFrame("HelloWorldSwing"); // Tehdään label, johon teksti laitetaan. JLabel label = new JLabel("Hello World"); // Lisätään label frameen. frame.getcontentpane().add(label); // Ikkunan sulkeutuessa ohjelma lopetetaan. frame.setdefaultcloseoperation(jframe.exit_on_close); // Pakataan frame ja laitetaan näkyviin. frame.pack(); frame.setvisible(true); public static void main(string[] args){ javax.swing.swingutilities.invokelater(new Runnable(){ public void run(){ createandshowgui(); ); Luodaan säie, joka kutsuu createandshowgui() metodia. Kaikki Swing-komponenttien piirtäminen ja tapahtumien käsittely tapahtuu yhdessä säikeessä. Tällä varmistetaan, ettei piirtäminen keskeydy jonkin tapahtuman lauetessa. Jotta vältetään deadlock :t, niin Swing-komponenttien luonti, päivitys ja käsittely pitää tehdä ko. tapahtumankäsittelijäsäikeessä. Oheista koodia voi käyttää sellaisenaan. Look & Feel Swing-ohjelmissa on mahdollista määrittää ns. Look & Feel eli miltä ohjelma näyttää ja tuntuu Jos ei ole määritelty koodissa, niin Java yrittää ensin etsiä käyttäjän asettamaa oletusarvoa ja jos sitäkään ei ole, niin käytetään Java-Look & Feeliä Ei tarvitse rajoittua vain Javan mukana tuleviin Look & Feel:hin Muita Look & Feel:jä saatavilla yleensä.jarpaketeissa Voidaan muuttaa myös ohjelman ajon aikana

Look & Feel Lisätään edelliseen ohjelmaan Javan default-look & Feel:... String lookandfeel = null; lookandfeel = UIManager.getCrossPlatformLookAndFeelClassName(); try { UIManager.setLookAndFeel(lookAndFeel); catch (Exception e) {... Yllä ikkunointijärjestelmältä pyydetään nimi look & feel:lle Tämän jälkeen asetetaan ko. look & feel Voidaan myös antaa suoraan: com.sun.java.swing.plaf.motif.motiflookandfeel com.sun.java.swing.plaf.gtk.gtklookandfeel Voidaan asettaa koodissa, swing.properties:ssa, komentorivillä Tapahtumienkäsittely Lisätään ensin toiminnallisuutta sisältävä komponentti ohjelmaan Painike Swingissä on siis JButton: // Luodaan painike. JButton button = new JButton( Click me! ); // Lisätään painike. frame.getcontentpane().add(button); Painike menee aikaisemmin lisätyn tekstin päälle, koska JFrame:lla ei ole määritelty asemoijaa (LayoutManager) Yksinkertainen yhden sarakkeen GridLayout: frame.setlayout(new GridLayout(0,1)); Tarvitaan myös import java.awt.*; Nyt painike ei siis vielä tee mitään ja sille pitää määrittää tapahtumankäsittelijä

Tapahtumienkäsittely Muokataan ensin koodia siten, että omassa metodissaan luodaan ensin JPanel, johon kaikki komponentit lisätään private Component createcomponents{ JPanel panel = new JPanel(new GridLayout(0,1)); JButton button = new JButton( Click Me! ); panel.add(button); return panel; Tämä JPanel laitetaan sitten pääikkuna-frameen Huom. static metodeissa ei siis voi kutsua suoraan luokan non-static metodeja pitää siis luoda olio ja kutsua olion metodia Tapahtumienkäsittely Jotta tapahtumankäsittelijää voisi käyttää, pitää luokan toteuttaa ActionListener-rajapinta: class MySwingApp implements Actionlistener Painikkeen tapahtumien kuuntelijaksi lisätään ko. luokka: button.addactionlistener(this); Ja lopuksi pitää siis luokan vielä toteuttaa tapahtumankäsittelijä: void actionperformed(actionevent e){ // TODO: mitä tehdään, kun jokin // ActionEvent tapahtuu Eli tapahtumat pitää ottaa kiinni :)

Tapahtumienkäsittely Lisätään int-muuttuja sekä JLabel, johon laitetaan painikkeen napsauttelujen määrä Jotta attribuutit olisivat käsiteltävissä, ne pitää laittaa luokan attribuutiksi // numclicks pitää kirjaa napsautuksista private int numclicks = 0; // Luodaan uusi label private JLabel labelclicks = new JLabel(); Lisätään tapahtumankäsittely, jossa lisätään muuttujan arvoa void actionperformed(actionevent e){ numclicks++; labelclicks.settext( Clicks: + numclicks);