Ikkunointijärjestelmät

Samankaltaiset tiedostot
JAVA-OHJELMOINTI 3 op A274615

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Java Swing. Juha Järvensivu 2007

Olio-ohjelmointi Käyttöliittymä

Java Swing. Juha Järvensivu 2008

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä

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ä

Graafinen käyttöliittymä, osa 2

Ohjelmoinnin peruskurssien laaja oppimäärä

Java ja grafiikka. Ville Sundberg

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Osio 4: Graafinen käyttöliittymä

Graafisen käyttöliittymän ohjelmointi

Java layoutit. Juha Järvensivu 2007

Osio 4: Graafinen käyttöliittymä

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Tapahtumapohjainen ohjelmointi

GTK+ ohjelmointi. Juha Järvensivu 2007

Qt-käyttöliittymäkirjasto

Qt perusteet. Juha-Matti Vanhatupa. (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

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

Graafisen käyttöliittymän automaattinen testaus

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

JAVA-OHJELMOINTI 3 op A274615

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

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

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

Harjoitustyö (TKO_2023)

Sovelmat. Janne Käki

Metodien tekeminen Javalla

QT framework. Juha Järvensivu 2007

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Mikä yhteyssuhde on?

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

Rajapinta (interface)

Ohjelmointi 2 / 2010 Välikoe / 26.3

Graafisen käyttöliittymän ohjelmointi Syksy 2013

QT tyylit. Juha Järvensivu 2008

Eclipse 3.1 Pikaopas versio 1.0

Microsoft Visual J++ ohjelmointiympäristö

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tietorakenteet, laskuharjoitus 7,

Dialogit. Juha Järvensivu 2008

public static void main (String [] args)

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

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

3.1. java.applet. 3. Javan ääniohjelmointi. Muita esille tulevia Appletmetodeja. Applet-luokan äänimetodeja. AudioClip-rajapinta.

Graafinen käyttöliittymä, osa 3

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

9. Periytyminen Javassa 9.1

Graafisen käyttöliittymän ohjelmointi

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

Eclipse & WindowBuilder

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ti LÄHIVERKOT -erikoistyökurssi. X Window System. Jukka Lankinen

Oliosuuntautuneita apletteja

Olio-ohjelmointi Javalla

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

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

C# ja.net. Juha Järvensivu 2007

Javan GUI Scratchaajalle

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

Käyttöliittymäohjelmointi

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

1. Olio-ohjelmointi 1.1

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

9. Periytyminen Javassa 9.1

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

HSMT TCP- ja UDP-soketeista

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

OHJ-7400 Graafisen käyttöliittymän ohjelmointi 4/6op

Javan GUI Scratchaajalle

Vesisika. metsiemme työmyyrä.

1. Omat operaatiot 1.1

Scratchbox ja Maemo. Nokia 770 Internet Tablet-ohjelmistokehitys. Timo Savola. Movial Oy. FUUG:in kevätristeily

Kehittyneet ominaisuudet

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

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin peruskurssien laaja oppimäärä

JUnit ja EasyMock (TilaustenKäsittely)

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 )

Poikkeusten ja tapahtumien käsittely

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Ohjelmistotekniikan menetelmät, koe

Web Services tietokantaohjelmoinnin perusteet

Javan perusteita. Janne Käki

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

Transkriptio:

Ikkunointijärjestelmät Johdanto X-ikkunointijärjestelmä Java Yhteenveto Petri Vuorimaa 1

Tehtävät Piirtorutiinit Syöttölaitteiden monitorointi Tapahtumien välitys Ikkunoiden manipulointi Petri Vuorimaa 2

Näkökulmat Ohjelmointirajapinta + käyttöliittymäkirjasto Sovelluksen käyttöliittymä + vuorovaikutus käyttäjän kanssa Hallintoliittymä + ikkunoiden hallinnointi ym. Käyttöliittymä + kaikki sovellukset ja ikkunat yhdessä Petri Vuorimaa 3

Kolme komponenttia Ikkunamanageri + ikkunoiden sijoittelu Syöttömanageri + syöttölaitteiden monitorointi Perusikkunointijärjestelmä + alusta, jonka päälle sovellukset, ikkunamanagerit ja syöttömanagerit toteutetaan Petri Vuorimaa 4

X-ikkunointijärjestelmä Historia Arkkitehtuuri Grafiikkakirjastot Desktop-ympäristöt Petri Vuorimaa 5

Historia Syntynyt MIT:ssa 1984 Pohjautuu W-ikkunointijärjestelmään (Stanford) Ensimmäinen kaupallinen versio (versio 10) 1986 MIT X Consortium 1988 X11R6 1994 Open Group ottaa vastuun jatkokehityksestä 1996 Kehitystyövastuu siirretään X.org:lle 1999 Petri Vuorimaa 6

Arkkitehtuuri Application Application GKS library X VDI VT100 emulator Window manager Text editor Text library X library X library X library X library Network Keyboard Mouse X server Device library Screen Petri Vuorimaa 7

Asiakas/Palvelin Palvelin toimii työasemassa Asiakas voi toimia samassa työasemassa tai erillisellä tietokoneella Kommunikointia varten oma X-protokolla Usempia asiakas voi käyttää samaa palvelinta ja sama asiakas voi käyttää useampaa palvelinta Petri Vuorimaa 8

XFree86 Suosituin X-ikkunointijärjestelmän toteutus Pentium-alustalle Yksi tärkeimmistä avoimen ohjelmistokoodin projekteista Mukana käytännössä kaikissa Linuxdistribuutioissa Petri Vuorimaa 9

DRI Direct Rendering Infrastructure Asiakas pääsee suoraan käsiksi näyttöpuskuriin Kommunikointi tapahtuu käyttöjärjestelmän ytimen DRI-ajurin kautta Mahdollistaa 3D-grafiikan käytön Petri Vuorimaa 10

Grafiikkakirjastot Sovellukset käyttävät X-ikkunointijärjestelmää peruskirjastojen kautta (Xlib) Alkuperäiset kirjastot tarjoavat vain matalan tason ominaisuuksia Niiden päälle rakennetut kirjastot rajoavat kehineempiä ominaisuuksia Nykyään käytössä kaksi peruskirjastoa: + GTK ja Qt Petri Vuorimaa 11

GTK Kehitetty Motif-kirjaston korvaajaksi GNOME-käyttöliittymän perusta Toteutettu C-ohjelmointikielellä Matkii kuitenkin olio-ohjelmointia Petri Vuorimaa 12

Qt KDE-käyttöliittymän perusta Toteutettu C++-ohjelmointikielellä Perustuu oliohjelmointiin Petri Vuorimaa 13

Hello World (1/2) #include <qapplication.h> #include <qlabel.h> int main( int argc, char* argv[] ) { Petri Vuorimaa 14

Hello World (1/2) } QApplication myapp( argc, argv ); QLabel* mylabel = new QLabel( "Hello world", 0 ); mylabel->resize( 120, 30 ); myapp.setmainwidget( mylabel ); mylabel->show(); return myapp.exec(); Petri Vuorimaa 15

Vuorovaikutus Qt käyttää signal-and-slot -menetelmää vuorovaikutuksen toteuttamiseen Singaalit vastaavat tapahtumia ja slotit ovat tapahtumien käsittelijöitä Petri Vuorimaa 16

Painonappi (1/2) #include <qapplication.h> #include <qpushbutton.h> int main( int argc, char* argv[] ) { QApplication myapp( argc, argv ); QPushButton* myquitbutton = new QPushButton( "Quit", 0 ); myquitbutton->resize( 120, 30 ); Petri Vuorimaa 17

Painonappi (2/2) } QObject::connect( myquitbutton, SIGNAL(clicked()), &myapp, SLOT(quit()) ); myapp.setmainwidget( myquitbutton ); myquitbutton->show(); return myapp.exec(); Petri Vuorimaa 18

Metakääntäjä Qt:n kanssa käytetään yleensä Meta Object Compiler (moc) -kääntäjää Se muuttaa Qt-luokkamääritykset C++-koodiksi moc:n avainsanoja ovat +Q_OBJECT + public slots: + protected slots: +private slots: + signals Petri Vuorimaa 19

Java Johdanto AWT Swing Esimerkki Appletit Petri Vuorimaa 20

Johdanto Javassa on kaksi peruskäyttöliittymäkirjastoa + Abstract Windowing System (AWT) ja Swing AWT hyödyntää Javan alla olevaa ikkunointijärjestelmää + ns. raskas "heavyweight" ikkunointijärjestelmä Swing on uudempi AWT:n laajennus + ns. kevyt "lightweight" ikkunointijärjestelmä Petri Vuorimaa 21

Komponentit Javassa peruselementtejä kutsutaan nimellä komponentti Vastaa widgettejä ja kontrolleja Petri Vuorimaa 22

AWT raskaat komponentit Button Checkbox CheckboxMenuItem Choice Component FileDiag Label List Menu MenuBar MenuComponent MenuItem PopUpMenu ScrollBar TextArea TextComponent TextField Petri Vuorimaa 23

Swing-komponentit (1/2) JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JEditorPane JFileChooser JLabel JList JMenuBar JMenuItem JMenu JPasswordField JPopupMenu JProgressBar Petri Vuorimaa 24

Swing-komponentit (2/2) JRadioButton JRadioButtonMenuItem JScrollBar JSlider JTable JTextArea JTextComponent JTextField JTextPane JToggleButton JToolBar JToolTip JTree Petri Vuorimaa 25

Containers Container on komponentti joka voi sisältää toisia komponentteja Tyypillisiä esimerkkejä ovat: + ikkunat + popup + dialogit Petri Vuorimaa 26

AWT Containers Applet Container Dialog Frame Panel ScrollPane Window Petri Vuorimaa 27

Swing Containers Box JApplet JDesktopPane JDialog JFrame JInternalFrame JLayeredPane JPanel JRootPane JScrollPane JSplitPane JTabbedPane JViewport JWindow Petri Vuorimaa 28

Asemointi Asemointi määrittelee minkälaisessa järjestyksessä komponentit näytetään visuaalisesti AWT ja Swing sisältävät erilaisia asemointimalleja Swing sisältää samat perusasemoinnit kuin AWT, mutta siinä on myös joukko omia asemointeja Petri Vuorimaa 29

AWT-asemointi BorderLayout CardLayout FlowLayout GridBagLayout GridLayout Petri Vuorimaa 30

Swing-lisäasemoinnit BoxLayout OverLayout ScrollPaneLayout ViewPortLayout Petri Vuorimaa 31

Tapahtumat Tapahtumien perusluokka on java.util.eventobject AWT määrittelee omat GUI tapahtumat luokassa java.awt.awtevent Swing käyttää määrittelee lisäksi omia tapahtumia luokassa javax.swing.event Petri Vuorimaa 32

Tapahtumien käsittely Tapahtumien käsittelyrutiinia kutsutaan tapahtumien kuuntelijaksi Kuuntelijat rekisteröityvät tapahtumien lähteelle + esim. addactionlistener() ja removeactionlistener() Rekisteröintien perusteella tapahtumat välitetään oikeillle käsittelyrutiineille Petri Vuorimaa 33

Swing-esimerkki (GUI) Java DisplayMessage "Do you really want to quit?" "Yes, Please", "No, Thanks" Paluukoodi (0/1) riippuu painetusta napista Message Do you really want to quit? Yes No Petri Vuorimaa 34

Swing-esimerkki (alku) import java.awt.*; import javax.swing.*; import javax.swing.border.*; import java.awt.event.*; public class DisplayMessage { public static void main(string[] args) { Petri Vuorimaa 35

Swing (komponenttien luonti) JLabel msglabel = new JLabel(); JButton yesbutton = new JButton(); JButton nobutton = new JButton(); Petri Vuorimaa 36

Swing-esimerkki (asetukset) msglabel.settext(args[0]); msglabel.setborder(new EmptyBorder(10,10,10,10)) yesbutton.settext((args.length >= 2)?args[1]:"Yes"); nobutton.settext((args.length >= 3)?args<[2]:"No"); Petri Vuorimaa 37

Swing-esimerkki (containers) JFrame win = new JFrame("Message); JPanel buttonbox = new JPanel(); Petri Vuorimaa 38

Swing-esimerkki (asemointi) win.getcontentpane().setlayout(new BorderLayout()); buttonbox.setlayout(new FlowLayout()); Petri Vuorimaa 39

Swing (lisää komponentit) buttonbox.add(yesbutton); buttonbox.add(nobutton); win.getcontentpane().add(msglabel, "Center"); win.getcontentpane().add(buttonbox, "South"); Petri Vuorimaa 40

Swing-esimerkki (tapahtumat) yesbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(0); } } nobutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(1); } } Petri Vuorimaa 41

Swing-esimerkki (näytä GUI) } } win.pack(); win.show(); Petri Vuorimaa 42

Appletit Appletit mahdollistavat Java-sovellusten lisäämisen www-sivuille Appletit erovat merkittävästi muista Javasovelluksista + Ei main-metodia + Appletia ei käynnistetä komentoriviltä, vaan se on www-sivun sisällä + Appletilla on merkittäviä turvallisuusrajoituksia Petri Vuorimaa 43

Metodit init() destroy() start() stop() getappletinfo getparameterinfo() getimage() getaudioclip() getparameter() getcodebase() getdocumentbase() showstatus() getappletcontext() Petri Vuorimaa 44

Applet-esimerkki (www-sivu) <APPLET code= MessageApplet.class width=350 height=125> <PARAM name= message value= Hello World > Applet viewer </APPLET> Hello World Petri Vuorimaa 45

Applet-esimerkki (java-koodi) Import java.applet.*; Import java.awt.*; Public class MessageApplet extends Applet { protected String message; protected Font font; Petri Vuorimaa 46

Applet-esimerkki (initialisointi) Public void init() { message = this.getparameter( message ); font = new Font( Helvetica, Font.BOLD, 48); } Petri Vuorimaa 47

Applet-esimerkki (piirto) public void paint(graphics g) { g.setcolor(color.pink); g.filloval(10, 10, 330, 110); g.setcolor(color.red); g.drawoval(10, 10, 330, 110); g.setcolor(color.black); g.setfont(font) g.drawstring(message, 40, 75); } Petri Vuorimaa 48

Yhteenveto Ikkunointijärjestelmä tarjoaa peruspalvelut vuorovaikutteisille sovelluksille Joissakin käyttöjärjestelmissä (esim. Windows) ikkunointi on integroitu muun käyttöjärjestelmän kanssa X-ikkunointijärjestelmä tarjoaa useita käyttöliittymäkirjastoja Myös Javassa on useampia vaihtoehtoja Petri Vuorimaa 49

Lähteet R. W. Scheifler & J. Gettys, "The X Window System," ACM Trans. Graphics, vol. 5, no. 2, April 1986, pp. 79-109. M. J. Hammel, "The History of XFree86," Linux Magazine, Dec. 2001. M. K. Dalheimer, "Linux GUI Development with QT," Linux Magazine, Dec. 2001. D. Sweet et al., KDE 2.0 Development, SAMS, 2000. D. Flanagan, Java Foundation Classes in a Nutshell, O'Reilly, 1999. Petri Vuorimaa 50