Tämän yksinkertainen
-hakemiston dokumentteja ei ole päivitetty vuoden 2017 jälkeen, joten voi hyvin sisältää toimimattomia linkkejä ja tietoa joka on jo muuttunut. Kannattaa vakavasti miettiä katsooko näitä sivuja lainkaan, sillä käytännön erot esimerkkeihin, joissa on myös harrastukset mukana, ovat pieniä ja tämä yksinkertaistus voi vaan turhaan sotkea lukijaa, joka on kuitenkin tekemässä monipuolisempaa versiota.
Lisäksi monet linkit ovat vanhaan trac
-järjestelmään tai svn
-versionhallintaan ja Digipalvelut voivat lopettaa nuo palvelut milloin tahansa varoittamatta.
Eli jatka omalla vastuullasi :-)
Ohjelmointi 2 / yksinkertaistettu esimerkki tiedon näyttämisestä
- mikäli haluat katsoa 2016 versiota, jossa lista on käsitelty kuten se JavaFX:ssä tarkkaa ottaen pitäisi käsitellä, niin katso 2016 mallia.
Tässä mallissa itse käyttöliittymää on yksinkertaistettu.
- Vaihe 5.1: koodit ja dokumentit - jäsenen tietojen kysyminen dialogilla.
Seuraavissa koodeissa rivinumerot viittaavat ko. vaiheen versioon. "Lopullisessa" versioissa siten voi olla eri rivinumerot.
Käyttöliittymä
Suunniteltu käyttöliittymä
on muutettu siten, että jäsenen tiedot näytetään yhteen isoon JTextArea
-komponenttiin ja jäsenten nimet näytetään ListChooser
-listaan.
Alkutilanne
Vaihe 3 on sellainen, missä on tiedosto KerhoGUIView.fxml
jossa on SceneBuilderillä
piirretty käyttöliittymä, jossa muutamasta painikkeesta ja menusta tulee ilmoitus "ei toimi vielä".
Tietorakenneluokat
Aluksi on tehty luokat
- Jasen - yksittäisen jäsenen käsittely. Osaa lähinnä rekisteröidä itsensä ja luoda sisälleen "Aku Ankka"-tiedot. Osaa myös tulostaa itsensä tietovirtaan.
- Jasenet - pitää kaikki jäsenet yhdessä rakenteessa.
Osaa toistaiseksi lisätä jäseniä ja antaa jäseniä pyydettäessä. - Kerho - välittäjäluokka, jolta käyttöliitymä pyytää palveluksia.
Toistaiseksi osaa lisätä jäsenen sekä antaa tietyn jäsenen tiedot.
Tietojen näyttäminen (5.1)
Tässä vaiheessa on lisätty tietojen näyttäminen käyttöliittymään niin, että jäsenen tiedot vaihtuvat kun listasta valitaan toinen jäsen. Vastaavat muutokset on tehty kummassakin mallissa, tässä esitetään vain 1. mallin mukaiset muutokset. 2. malliin on lopussa esitetty Jäsen-dialogin käytön takia tulevat muutokset.
Mallissa kerho
-olio luodaan heti pääohjelman käynnistyessä:
KerhoMain.java
027 primaryStage.setTitle("Kerho"); 028 Kerho kerho = new Kerho(); 029 kerhoCtrl.setKerho(kerho); 030 031 primaryStage.show();
Itse kerho
viedään lomakkeelle parametrina ja näin jos olisi useita lomakkeita, ne voisivat käyttää samaa kerhoa. Jotta luokasta KerhoViewController
luotu olioviite kerhoCtrl
olisi käytössä, pitää alkuperäinen latausrivi
vaihe 3: KerhoMain.java
019 BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("KerhoGUIView.fxml")); 020 Scene scene = new Scene(root);
jakaa useampaan osaan, jolloin ldr
(loader) -oliolta voidaan kysyä sen luoman kontrollerin viite:
KerhoMain.java
020 final FXMLLoader ldr = new FXMLLoader(getClass().getResource("KerhoGUIView.fxml")); 021 final Pane root = (Pane)ldr.load(); 022 final KerhoGUIController kerhoCtrl = (KerhoGUIController)ldr.getController(); 023 024 final Scene scene = new Scene(root);
Samalla BorderPane
-luokan tilalle on vaihdettu yleisempi container, jolloin koodi ei mene rikki, vaikka -fxml
-tiedostossa vaihettaisiin joku muu pane käyttöön.
Käyttöliittymään täytyy lisätä metodi niin, että Kerho
voidaan tuoda sille parametrinä:
KerhoGUIController.java
070 private Kerho kerho;
...
155 public void setKerho(Kerho kerho) { 156 this.kerho = kerho; 157 naytaJasen(); 158 }
Alustamismetodia alusta
kutsutaan initialize
-metodista, jota kutsutaan sitten kun .fxml
-tiedosto on luettu ja kaikki komponentit on luotu. Alustamisessa vaihdetaan GridPane
isoon tekstialueeseen, johon on tilapäisesti tarkoitus tulostaa tietoja. Samalla listalle lisätään käsittelijä, joka vaihtaa näytössä toisen jäsenen tiedot näkyvillä kun listan alkiota klikataan.
KerhoGUIController.java
080 protected void alusta() { 081 panelJasen.setContent(areaJasen); 082 areaJasen.setFont(new Font("Courier New", 12)); 083 panelJasen.setFitToHeight(true); 084 085 chooserJasenet.clear(); 086 chooserJasenet.addSelectionListener(e -> naytaJasen()); 087 }
Jäsenen tietojen näyttäminen tapahtuu siis kun valitun indeksi muuttuu (listan valinnan vaihtaminen laitettiin kutsumaan naytaJasen
:
KerhoGUIController.java
101 protected void naytaJasen() { 102 jasenKohdalla = chooserJasenet.getSelectedObject(); 103 104 if (jasenKohdalla == null) return; 105 106 areaJasen.setText(""); 107 try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen)) { 108 jasenKohdalla.tulosta(os); 109 } 110 }
Jotta käyttöliittymään saataisiin uusia jäseniä, on toteutettu ennen toimimaton uusiJasen
-metodi:
179 protected void uusiJasen() { 180 Jasen uusi = new Jasen(); 181 uusi.rekisteroi(); 182 uusi.vastaaAkuAnkka(); 183 try { 184 kerho.lisaa(uusi); 185 } catch (SailoException e) { 186 Dialogs.showMessageDialog("Ongelmia uuden luomisessa " + e.getMessage()); 187 return; 188 } 189 hae(uusi.getTunnusNro()); 190 }
hae-metodi hakee listan sisällön uudelleen ja laittaa sen jäsenen valituksi, jolla on kutsussa ollut id-numero:
KerhoGUIController.java
117 protected void hae(int jnro) { 118 chooserJasenet.clear(); 119 120 int index = 0; 121 for (int i = 0; i < kerho.getJasenia(); i++) { 122 Jasen jasen = kerho.annaJasen(i); 123 if (jasen.getTunnusNro() == jnro) index = i; 124 chooserJasenet.add(jasen.getNimi(), jasen); 125 } 126 chooserJasenet.getSelectionModel().select(index); // tästä tulee muutosviesti joka näyttää jäsenen 127 }
Listan tyhjennetään aluksi ja sitten jäseniä lisätään listaan.
Lopuksi vaihdetaan oikea jäsen kohdalle ja tämä laukaisee listan muutotapahtuman, mikä näyttää kohdalla olevan jäsenen.
Jäseniä listaan lisättäessä lisätään listassa näytettävä teksti ja olio, joka on tekstin kohdalla "tallessa". Näin saadaan jäsenolio helposti käyttöön kun jotakin kohtaa klikataan.
KerhoGUIController.java
101 protected void naytaJasen() { 102 jasenKohdalla = chooserJasenet.getSelectedObject(); 103 104 if (jasenKohdalla == null) return; 105 106 areaJasen.setText(""); 107 try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen)) { 108 jasenKohdalla.tulosta(os); 109 } 110 }
Harrastusten näyttäminen
- harrastusten näyttämiseksi samaan
TextAreaan
kannattaa lukea teksti jäsenten ja harrastusten yhteistyöstä
Jäsen-lomakkeen näyttäminen
Jäsenen muokkausdialogiin ei vielä ole koskettu, se tehdään vaiheessa 7.1.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.