Java Swing. Juha Järvensivu 2008

Samankaltaiset tiedostot
Java Swing. Juha Järvensivu 2007

JAVA-OHJELMOINTI 3 op A274615

Ikkunointijärjestelmät

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Graafinen käyttöliittymä, osa 3

Java layoutit. Juha Järvensivu 2007

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ä

Osio 4: Graafinen käyttöliittymä

Olio-ohjelmointi Käyttöliittymä

Java ja grafiikka. Ville Sundberg

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

Osio 4: Graafinen käyttöliittymä

Ohjelmoinnin peruskurssien laaja oppimäärä

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

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

JAVA-OHJELMOINTI 3 op A274615

Osio 4: Graafinen käyttöliittymä

Microsoft Visual J++ ohjelmointiympäristö

Eclipse & WindowBuilder

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

Rajapinta (interface)

Graafisen käyttöliittymän automaattinen testaus

5. HelloWorld-ohjelma 5.1

Rinnakkaisuus. Juha Järvensivu 2008

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Dialogit. Juha Järvensivu 2008

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

5. HelloWorld-ohjelma 5.1

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

C# ja.net. Juha Järvensivu 2007

Mikä yhteyssuhde on?

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

Pakkauksen kokoaminen

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

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Javan GUI Scratchaajalle

Oliosuuntautuneita apletteja

Eclipse 3.1 Pikaopas versio 1.0

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Graafisen käyttöliittymän ohjelmointi

Kieliversiointityökalu Java-ohjelmistoon. Ohje

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

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

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

QT tyylit. Juha Järvensivu 2008

3. Komponentit ja rajapinnat

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

Suunnittelumalleja, MVC. Juha Järvensivu 2008

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

Sovelmat. Janne Käki

Ohjelmoinnin jatkokurssi, kurssikoe

Metodien tekeminen Javalla

Olio-ohjelmointi Javalla

Javan GUI Scratchaajalle

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

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

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

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

OLIO-OHJELMOINTI Object programming versio:

.NET ajoympäristö. Juha Järvensivu 2007

Pakkauksen kokoaminen

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

Graafinen käyttöliittymä, osa 1

Rich Web Applications in Server-side Java without Plug-ins or JavaScript

Ohjelmointi 2 / 2010 Välikoe / 26.3

Tietorakenteet, laskuharjoitus 7,

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

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

Dialogit. Juha Järvensivu 2007

Poikkeusten ja tapahtumien käsittely

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

RINNAKKAINEN OHJELMOINTI A,

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

7.4 Variability management

JUnit ja EasyMock (TilaustenKäsittely)

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

7. Product-line architectures

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

20. Javan omat luokat 20.1

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

812336A C++ -kielen perusteet,

Luokan sisällä on lista

16. Javan omat luokat 16.1

HOJ J2EE & EJB & SOAP &...

Tapahtumapohjainen ohjelmointi

Transkriptio:

Java Swing Juha Järvensivu juha.jarvensivu@tut.fi 2008

Sisällys Java ympäristöt Java kirjastot Java Foundation Classes (JFC) Hello Java Swing-kirjasto Grafiikan piirto Tapahtumankäsittely

Java ympäristö J2ME (Java Platform, microedition) Mobiilisovellukset J2SE (Java Platform, standard edition) Työpöytäsovellukset J2EE (Java Platform, enterprise edition) Web ja palvelin-sovellukset (Web Service, Java Servlet, Java Beans )

Javan versionti Java JDK 1.0 Java JDK 1.1 Java JDK 1.2 Java 2 SDK 1.2 Java 2 SDK 1.3 Java 2 SDK 1.4 Java 2 SDK 1.5 Java 2 JDK 5.0 Java SE 6 (Java standard edition SDK)

JDK vs JRE JRE (Java Runtime Environment) Sisältää Java virtuaalikoneen ja muut sovellusten ajamiseen tarvittavat komponentit Ei sisällä sovelluskehitykseen tarvittavia työkaluja JDK (Java Development Kit) Sisältää Java virtuaalikoneen ja muut JRE:n mukana tulevat komponetit Sisältää lisäksi sovelluskehitykseen tarvittavat työkalut kuten kääntäjä, debuggeri, jne.

Eclipse Graafinen kehitystyökalu Javasovelluksille www.eclipse.org

Java Platform (J2SE)

Java Platform (J2SE)

Java Foundation Classes (JFC) Abstract Window Toolkit (AWT) - APIs that enable programs to integrate into the native desktop window system, including APIs for Drag and Drop. Java 2D - APIs to enable advanced 2D graphics, imaging, text and printing. Swing GUI Components - APIs that extend the AWT to provide a rich, extensible GUI component library with a pluggable look and feel. Accessibility - APIs and assistive technologies are for ensuring an application is accessible to users with disabilities and meets government requirements for accessibility. Internationalization - All JFC technologies include support for creating applications that can interact with users around the world using the user's own language and cultural conventions. This includes the Input Method Framework API. Lähde: http://java.sun.com/products/jfc/overview.html#1

Abstract Window Tookit (AWT) The java.awt package contains the base-level APIs that allow Java applications to interact with the native window system on each platform. These APIs include support for creating and managing windows (discrete areas on the display), getting input events, and rendering simple graphics. The AWT also includes a set of simple GUI components that map directly to the native widget counterparts on the given platform. Lähde: http://java.sun.com/products/jfc/overview.html#1

Java Swing The Swing toolkit is a fully-featured UI component library implemented entirely in the Java programming language. The J2SE platform's javax.swing package uses the windowing functionality of AWT and the rendering capabilities of the Java 2D API to provide sophisticated and highly extensible UI components that comply with the JavaBeans specification. Lähde: http://java.sun.com/products/jfc/overview.html#1

Heavyweight component Komponteilla natiivitoteutus Varaavat oman ikkunaresurssin Uusien komponenttien periyttäminen hankalaa

Lightweight component Komponentit toteutettu javalla Käyttävät isäntäkomponentin ikkunaresurssia Uusien komponenttien toteuttaminen helppoa

AWT vs SWING AWT Heavyweight komponentteja Ikkunat aina suorakulmion muotoisia Komponentit eri näköisiä eri ympäristöissä Natiivitoteutus SWING Lightweight komponentteja Tuki läpinäkyville pikseleille Pluggable look and feel Java-toteutus Älä käytä samassa sovelluksessa sekaisin AWT (esim Button) ja SWING (esim JButton) komponentteja!

Awt-Swing Swing on toteutettu AWT:n päälle ja se käyttää toteutuksessaan AWT:n luokkia (Esim Graphics, MouseListener jne) Swing ja AWT UI-komponentit toteutettu eri tavalla, joten ne eivät sovellu käytettäväksi samassa ohjelmassa vaan on valittava kumpaa kirjastoa käyttää! Swing komponentit tunnistaa J-kirjaimesta nimen alussa (Esim JButton)

Heavyweight vs lightweight component

Java Swing UI components Atomic controls Complex data components Text components Menu components Layout containers Top-level window components JLabel, JButton, JCheckBox, JRadioButton, JToggleButton, JComboBox, JScrollBar, JSeparator, JSlider, JSpinner, JProgressBar JTable, JTree, JList, JFileChooser, JColorChooser, JOptionPane JTextField, JFormattedTextField, JPasswordField, JTextArea, JTextPane, JEditorPane JMenuBar, JMenu, JPopupMenu, JMenuItem, JCheckboxMenuItem, JRadioButtonMenuItem JPanel, JScrollPane, JSplitPane, JTabbedPane, JDesktopPane, JToolBar JFrame, JDialog, JWindow, JInternalFrame, JApplet

Pluggable look and feel Native Windows Look and Feel Supported on Microsoft windows only Native Mac Look and Feel Supported on Mac only Java Look and Feel Supported on all platforms Motif Look and feel Supported on all platforms

Hello.java (CLI) /** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */ class HelloWorldApp { public static void main(string[] args) { System.out.println("Hello World!");

Sovelluksen kääntäminen ja ajaminen // Lähdekooditiedosto HelloWorldApp.java // Käännetään lähdekoodi tavukoodiksi javac HelloWorldApp.java // Käännetty tavukooditiedosto HelloWorldApp.class // Käynnistetään sovellus java HelloWorldApp

Hello.java (GUI) import javax.swing.*; public class HelloWorldSwing { private static void createandshowgui() { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); frame.pack(); frame.setvisible(true); public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui();

Swing-kirjasto javax.swing Sisältää käyttöliittymäkomponentit JButton, JLabel, JTextField, JFrame jne. javax.swing.event Tapahtumaluokat ActionEvent, KeyEvent, MouseEvent jne. Rajapintaluokat ActionListener, KeyListener, MouseListener jne. Adapteriluokat KeyAdapter, MouseAdapter, WindowAdapter javax.swing.plaf Sisältää LookAndFeel toiminnallisuuden tarvitsemia luokkia

Swing-kirjasto java.awt.graphics Grafiikan piirton tarvittava luokka java.awt.graphics.graphics2d Sisältää monipuolisempia piirtometodeja java.awt.geom Sisältää geometrisia muotoja Ellipse2D, Rectangle2D, Line2D

JComponent Lightweight-komponenttien kantaluokka Esim JButton JComponent AbstractButton JButton JToggleButton JCheckBox JRadioButton

Koosteoliot (Container) Javassa UI-komponentit lisätään Containeroliohin (vrt..net ja absoluuttiset koordinaatit) Komponenttien sijainti näytöllä riippuu käytetystä Layout-managerista JPanel lightweight-komponenttien koosteolio

Container Container LayoutManager Component Component Component

FlowLayout Yksinkertaisin layoutmanageri Asettelee komponentit järjestyksessä vasemmalta oikealle ja ylhäältä alas JPanel-luokka käyttää oletuksena Käyttää komponenttien piirtoon niille määritettyä oletuskokoa (preferredsize) Comp1 Comp2 Comp3 Comp4 Comp5 Comp6

BorderLayout Jakaa ikkunan viiteen alueeseen Ikkunaa suurennettaessa CENTER-alueen komponentti kasvaa Oletuksena ContentPane-komponentilla PAGE_START LINE_START CENTER LINE_END PAGE_END

GridLayout Kaikki komponentit ovat saman kokoisia Ikkunan koon muutos muuttaa myös komponenttien kokoja Komponentit lisätään oletuksena rivi kerrallaan vasemmalta oikealle http://java.sun.com/docs/books/tutorial/uiswing/layout/grid.html

GridBagLayout

GridBagLayout

JFrame JDialog JInternalFrame Top-level container

JFrame layers

JFrame layers Root Pane (Juuriruutu) Osat: Glass pane, Layered pane Ei yleensä tarvitse käsitellä suoraan ohjelmakoodissa Layered Pane (Kerrosruutu) Container Asettaa komponentit eri tasoihin (esim raahatava komponentti piirretään päälimmäiseksi) Osat: MenuBar ja Content pane

JFrame layers Content Pane (Sisältöruuutu) Container Sisältää UI-komponentit frame.getcontentpane().add(yellowlabel, BorderLayout.CENTER); GlassPane (Lasiruutu) Component Läpinäkyvä päälimmäinen kerros Mahdollisuus estää tapahtumien pääsy säiliön komponenteille

Grafiikan piirto java.awt.graphics abstrakti kantaluokka, joka sisältää grafiikan piirtoon tarvittavat metodit java.awt.graphics2d Toteuttaa monimutkaisemmat grafiikan ja tekstin piirtoon tarvittavat funktiot Esim void rotate(double theta) void scale(double sx, double sy) void translate(int x, int y)

Ikkunan päivittäminen Ikkunan piirtofunktio void paint(graphics g) Ikkunan päivittäminen ohjelmallisesti void repaint() void repaint(int x, int y, int w, int h)

Esimerkki paint-metodista import javax.swing.*; import java.awt.*; public class hello extends JPanel { public hello() { setpreferredsize(new Dimension(300,300)); public void paint(graphics g) { super.paint(g); g.setcolor(color.blue); Shape s = g.getclip(); g.setclip(120,120,100,100); g.filloval(20,20,200,200); g.setclip(s);

Piirtojärjestys

Tapahtumakäsittely Tapahtumankäsittely on toteutettu javassa rajapintaluokkien avulla public interface MouseListener { void mouseclicked(mouseevent e); void mouseentered(mouseevent e); void mouseexited(mouseevent e); void mousepressed(mouseevent e); void mousereleased(mouseevent e); public class MouseEvent { int getbutton(); int getclickcount(); Point getpoint(); int getx(); int gety(); public interface MouseMotionListener { void mousedragged(mouseevent e); void mousemoved(mouseevent e);

Hiiritapahtumat import javax.swing.*; import java.awt.*; import java.awt.event.*; // Otetaan uusi kirjasto käyttöön public class hello extends JPanel implements MouseListener { private int x; private int y; public hello() { // Rekisteröidään olio kuuntelemaan hiiritapahtumia addmouselistener(this); // Tyhjät toteutukset niille funktiolle, joita ei käytetä public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousereleased(mouseevent e) { // Toteutetaan tapahtumankäsittelijä, joka ottaa talteen klikkauspisteen // koordinaatit ja päivittää ikkunan uudelleen public void mousepressed(mouseevent e) { x = e.getx(); y = e.gety(); repaint();

Adapteriluokat Antaa rajapintafunktioille tyhjät toteutukset import javax.swing.*; import java.awt.*; import java.awt.event.*; public class hello extends JPanel private int x; private int y; public hello() { // Luodaan olio ja rekisteröidään se kuuntelemaan hiiritapahtumia addmouselistener( new MouseHandler() ); // Sisäinen luokka ja peritään se MouseListener rajapinnan // toteuttavasta MouseAdapter luokasta. public class MouseHandler extends MouseAdapter { public void mousepressed(mouseevent e) { x = e.getx(); y = e.gety(); repaint();

Adapteriluokat Rajapinta MouseListener MouseMotionListener MouseWheelListener WindowListener WindowStateListener WindowFocusListener KeyListener ActionListener Adapteri MouseAdapter MouseMotionAdapter WindowAdpater KeyAdapter

Action Action

public class ActionDemo extends JPanel { protected Action firstaction; protected JMenuItem item; protected JButton btn; Action public ActionDemo() { firstaction = new FirstAction( Toiminnon nimi, icon); item=new JMenuItem(); item.setaction(firstaction); btn = new JButton(); btn.setaction(firstaction); public class FirstAction extends AbstractAction { public void actionperformed(actionevent e) { setenabled(false);

Näppäintapahtumat Voidaan toteuttaa Action-olioiden sekä InputMap ja ActionMap luokkien avulla public class ActionDemo extends JPanel { public ActionDemo() { InputMap im = getinputmap(); ActionMap am = getactionmap(); KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_1,0); im.put(ks, 1"); am.put( new KeyAction(), 1"); public class KeyAction extends AbstractAction { public void actionperformed(actionevent e) { // Näppäinkäsittelijän toteutus tänne

Dokumentaatio The Swing tutorial http://java.sun.com/docs/books/tutorial/uiswin g/toc.html Java API http://java.sun.com/j2se/1.5.0/docs/api/

Lähteitä Java AWT http://java.sun.com/j2se/1.5.0/docs/guide/awt/ http://en.wikipedia.org/wiki/abstract_window_toolkit Java Swing http://java.sun.com/j2se/1.5.0/docs/guide/swing/ http://en.wikipedia.org/wiki/swing_(java) The Swing tutorial http://java.sun.com/docs/books/tutorial/uiswing/toc.html Sun java http://java.sun.com/ JavaWorld http://www.javaworld.com/ How to use actions http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html