Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Samankaltaiset tiedostot
Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Graafisen käyttöliittymän ohjelmointi

Tapahtumapohjainen ohjelmointi

Windowsin sanomanvälitys. Juha Järvensivu 2007

Winapi. Juha Järvensivu 2007

Mikä yhteyssuhde on?

Olio-ohjelmointi Käyttöliittymä

Windowsin sanomanvälitys. Juha Järvensivu 2008

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

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1

Metodien tekeminen Javalla

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

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

Osio 4: Graafinen käyttöliittymä

Olio-ohjelmointi Javalla

JAVA-OHJELMOINTI 3 op A274615

Osio 4: Graafinen käyttöliittymä

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Java-kielen perusteet

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

Rajapinta (interface)

public static void main (String [] args)

QT framework. Juha Järvensivu 2007

17. Javan omat luokat 17.1

Listarakenne (ArrayList-luokka)

QT model view. Juha Järvensivu 2008

Ohjelmointi 2 / 2010 Välikoe / 26.3

Graafisen käyttöliittymän ohjelmointi

7. Näytölle tulostaminen 7.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Dialogit. Juha Järvensivu 2008

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

20. Javan omat luokat 20.1

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

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

5 Näppäimistö. 5.1 Näppäimistön eventit

Java ja grafiikka. Ville Sundberg

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

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

1. Omat operaatiot 1.1

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

Lista luokan sisällä

1 Tehtävän kuvaus ja analysointi

YHTEYSSUHDE (assosiation)

C# ja.net. Juha Järvensivu 2007

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

Web Services tietokantaohjelmoinnin perusteet

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Microsoft Visual Studio 2005

Ohjelmistotekniikan menetelmät, koe

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

19. Olio-ohjelmointia Javalla 19.1

Valikot ja työkalupalkit. 2008

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Java kahdessa tunnissa. Jyry Suvilehto

Delegaatit ja tapahtumakäsittelijät

Java-kielen perusteita

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

GTK+ ohjelmointi. Juha Järvensivu 2007

Muuttujat ja kontrolli. Ville Sundberg

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

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

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Ohjelmointiharjoituksia Arduino-ympäristössä

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

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

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

Dialogit. Juha Järvensivu 2007

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Harjoitustyö (TKO_2023)

1 of

Graafinen käyttöliittymä, osa 1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

Luokan muodostimet (Constructors)

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

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

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

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

LUKU 17 MUUTAMIA JAVA FX -SOVELLUKSIA. Tässä dokumentissa esitellään muutamia Java FX -sovelluksia.

Sisältö. 2. Taulukot. Yleistä. Yleistä

12. Näppäimistöltä lukeminen 12.1

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Rinnakkaisuus. Juha Järvensivu 2008

Sisältö. 22. Taulukot. Yleistä. Yleistä

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

C++11 lambdat: [](){} Matti Rintala

Transkriptio:

Tapahtumapohjainen ohjelmointi Juha Järvensivu juha.jarvensivu@tut.fi 2008

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Tapahtumapohjaisuus käyttöliittymissä Timer Sovellus Käyttöjärjestelmä

Tapahtuman kulku Event generator Event Dispatcher Handler1 Handler2 Handler n

Tapahtuma Tapahtumille ei yleensä määritellä paluuarvoa Windowsissa yleinen tapa on merkitä tapahtuman kuuntelija onetuliitteellä Kuuntelijat tietynlaisia funktioita, jotka rekisteröidään kuuntelemaan tapahtumaa Esim. Button btnok = new Button(); btnok.click += new EventHandler(OnOKClicked); public void OnOKClicked(object sender, EventArgs e) //

Erot perinteisiin sovelluksiin Sovelluksen kulku ei ole ennalta tiedossa Start A B C D End Dispatcher A C B D End

Perinteinen sovellus void main(string[] args ) string nimi, hetu, osoite; Console.WriteLine("Anna nimi: "); nimi = Console.ReadLine(); Console.WriteLine("Anna henkilötunnus: "); hetu = Console.ReadLine(); Console.WriteLine("Anna osoite: "); osoite = Console.ReadLine(); Save(nimi, hetu, osoite);

Tapahtumapohjainen sovellus string nimi, osoite, hetu; static void main() Application.Run( new Form1() ); private void nimi_handler(object sender, EventArgs e) nimi = ((TextBox)sender).Text; private void hetu_handler(object sender, EventArgs e) hetu = ((TextBox)sender).Text; private void osoite_handler(object sender, EventArgs e) osoite = ((TextBox)sender).Text; private void tallenna_click(object sender, EventArgs e) Save(nimi, hetu, osoite); Close();

Tapahtumakuuntelijan toteutus.net Java GTK WinApi MFC QT eventtien avulla rajapintojen avulla signaalien avulla sanomien avulla makrojen avulla signaalien ja slottien avulla

Esimerkki.NET public class MyWindow : System.Windows.Form Button btn = new Button(); public void MyWindow() //... btn.click += new EventHandler(BtnClick); public void BtnClick(object sender, EventArgs e) //

Esimerkki Java public class MyWindow extends JFrame implements ActionListener Button btn = new Button(); public void MyWindow() // btn.addactionlistener(this); public void actionperformed(actionevent e) //

Esimerkki MFC // CMyDlg.h class CMyDlg:public CDialog afx_msg void OnBnClick() DECLARE_MESSAGE_MAP() // CMyDlg.cpp BEGIN_MESSAGE_MAP( CMyDlg, CDialog ) ON_BN_CLICKED(IDC_BTN, &CMyDlg::OnBnClicked) END_MESSAGE_MAP() void CMyDlg::OnBnClick () //

Esimerkki GTK int main(int argc, char *argv[]) // GtkWidget *button = gtk_button_new(); g_signal_connect(g_object(button), clicked, G_CALLBACK(btnclick),NULL); void btnclick(gtkwidget* w, gpointer data) //

Esimerkki WinApi int WinMain( ) CALLBACK WndProc(HWND hwnd, UIT message, WPARAM wparam, LPARAM lparam) static HWND hwndbtn; switch( message ) case WM_CREATE: hwndbtn = CreateWindow( button, nimi", WS_CHILD WS_VISIBLE, 0, 30, 100, 30, hwnd, (HMENU) 1, hinst, NULL); break; case WM_COMMAND: if ( LOWORD(wParam) == BN_CLICKED ) if( HIWORD(wParam) == hwndbtn ) //

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Pääikkuna (top-level window) Jokaisella sovelluksella on pääikkuna (main window), joka luodaan ohjelman käynnistyessä Pääikkuna sisältää yleensä otsikon, valikon, reunukset sekä minimize- ja maximize-painikkeet Kun pääikkuna suljetaan, myös sovellus suoritus päättyy Pääikkunalla ei ole parent-ikkunaa

Pääikkuna (top-level window)

Lapsikkuna (child window) Lapsi-ikkunalla (child window) on aina yksi isäntäikkuna (parent window) Paikkakoordinaatit suhteessa isäntäikkunaan Lapsi-ikkuna ei voi sijaita isäntäikkunan ulkopuolella

Dialogit Modaalinen vs modaaliton ikkuna Omistus-suhde (owner)

Z-järjestys

Ikkunan fokus Valittuna oleva ikkuna (kuvassa btn1) Komponentti, joka ottaa vastaan näppäinpainallukset jne. Käyttäjä voi vaihtaa focusta esim hiiren tai näppäimistön avulla

Tab-järjestys Tabulaattori-näppäimellä voidaan vaihtaa focus seuraavalle (lapsi)ikkunalle Suunnittele käyttöliittymä aina siten että sitä voidaan käyttää pelkän näppäimistönkin avulla!.net TabIndex TabStop Tab

Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit (owned window) Unkarilainen notaatio

Unkarilainen notaatio Nimeämiskäytäntö, jossa muuttujan nimi kertoo myös muuttujan tyypin tai käyttötarkoituksen int nrow; // n kertoo muuttujan tyypin (int) int rwpos; // rw kertoo muuttujan // käyttötarkoituksen (row)

Esimerkkejä Tyyppi Etuliite Esimerkki int n nage char ch chinitial float fl flangle double d dsalary unsigned u uid long l lhours BOOL b bdone WORD w wsize DWORD dw dwerror osoitin p pbutton

Esimerkkejä m_ jäsenmuuttuja (esim m_value) p osoitin (pvalue) m_pvalue m_nvalue (integer jäsenmuuttuja) m_pnvalue (osoitin integer-muuttujaan)

Esimerkki class Class1 void createcopy(int & nid, Class1*& pclass); bool copy(class1* pclass); int m_nid; bool Class1::createCopy(int & nid, Class1*& pclass) bool bret = false; nid = m_nid; pclass = new Class1(); if( pclass) if( pclass->copy(this) ) bret=true; else delete pclass; pclass = NULL; nid = 0; return bret;

Lähteitä Event-driven programming (wikipedia) http://en.wikipedia.org/wiki/event-driven_programming Event-Driven programming: Introduction, Tutorial, History http://eventdrivenpgm.sourceforge.net/event_driven_programming.pdf Windows overviews (top-level, child, owner) http://msdn.microsoft.com/library/default.asp?url=/library/enus/winui/winui/windowsuserinterface/windowing/windows/aboutw indows.asp

Lähteitä Window features http://msdn.microsoft.com/library/default.asp?u rl=/library/enus/winui/winui/windowsuserinterface/windowi ng/windows/windowfeatures.asp Ikkunan fokus http://en.wikipedia.org/wiki/focus_(computing )