Java Swing. Juha Järvensivu 2007

Samankaltaiset tiedostot
Java Swing. Juha Järvensivu 2008

JAVA-OHJELMOINTI 3 op A274615

Ikkunointijärjestelmät

Graafinen käyttöliittymä, osa 3

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Java ja grafiikka. Ville Sundberg

Graafinen käyttöliittymä, osa 2

Olio-ohjelmointi Käyttöliittymä

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

Osio 4: Graafinen käyttöliittymä

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Osio 4: Graafinen käyttöliittymä

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 UI-komponentit (JTable) Juha Järvensivu 2008

Ohjelmoinnin peruskurssien laaja oppimäärä

Osio 4: Graafinen käyttöliittymä

Microsoft Visual J++ ohjelmointiympäristö

Osio 4: Graafinen käyttöliittymä

Rajapinta (interface)

Rinnakkaisuus. Juha Järvensivu 2008

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

5. HelloWorld-ohjelma 5.1

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Graafisen käyttöliittymän automaattinen testaus

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Eclipse & WindowBuilder

5. HelloWorld-ohjelma 5.1

C# ja.net. Juha Järvensivu 2007

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

Eclipse 3.1 Pikaopas versio 1.0

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Pakkauksen kokoaminen

Graafisen käyttöliittymän ohjelmointi

Javan GUI Scratchaajalle

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Mikä yhteyssuhde on?

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

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

Oliosuuntautuneita apletteja

Kieliversiointityökalu Java-ohjelmistoon. Ohje

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

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

Suunnittelumalleja, MVC. Juha Järvensivu 2008

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

Java layoutit. Juha Järvensivu 2007

Dialogit. Juha Järvensivu 2008

QT tyylit. Juha Järvensivu 2008

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

3. Komponentit ja rajapinnat

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

Sovelmat. Janne Käki

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

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

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

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

Pakkauksen kokoaminen

Olio-ohjelmointi Javalla

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

Metodien tekeminen Javalla

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

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

OLIO-OHJELMOINTI Object programming versio:

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

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

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

RINNAKKAINEN OHJELMOINTI A,

Tietorakenteet, laskuharjoitus 7,

Graafinen käyttöliittymä, osa 1

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

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

7.4 Variability management

7. Product-line architectures

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

Ohjelmoinnin jatkokurssi, kurssikoe

Poikkeusten ja tapahtumien käsittely

20. Javan omat luokat 20.1

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

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

812336A C++ -kielen perusteet,

HOJ J2EE & EJB & SOAP &...

Tapahtumapohjainen ohjelmointi

Kurssin suoritus. Javan perusteet Kurssimateriaali. Kurssin aikataulu. Kurssin sisältö. Harjoitukset. Javan perusteet

17. Javan omat luokat 17.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

16. Javan omat luokat 16.1

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

.NET 2006 ja sen jälkeen

Harjoitustyö (TKO_2023)

1 Tehtävän kuvaus ja analysointi

Transkriptio:

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

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

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

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