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.

Seuraavissa koodeissa rivinumerot viittaavat ko. vaiheen versioon. "Lopullisessa" versioissa siten voi olla eri rivinumerot.

Käyttöliittymä

Suunniteltu käyttöliittymä

Suunniteltu 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.

Tilapäinen käyttöliittymä
Tilapäinen käyttöliittymä

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ä:

# c2

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ä:

# c8

KerhoGUIController.java

070     private Kerho kerho;
# c6

...

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:

# c5
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

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.