wiki:JList
Last modified 7 years ago Last modified on 2011-05-01 18:12:13

JList

Swing-kirjastossa monen komponentin käyttö perustuu MVC-maliin (Model View Controller). Tämä tekee komponettien peruskäytöstä lievästi sanoen hankalaa.

1. Esimerkki Jäsenten näyttämisestä

Seuraavana esimerkki siitä, miten malliohjelmassa Jäsenet saadaan näkyviin JList-komponenttiin. Kaikki em koodi on KerhoSwing-luokassa ja itse JList on luotu KerhoGUI-luokassa.

1.1 Alustus

Aluksi täytyy olla luotuna jokin Model. Parasta olisi jos jaksaisi tehdä oman Modelin Jäsenet-luokalle, mutta hätätilassa pärjää oletusmallilla. Jossakin metodissa ennen listan käyttöä liitetään listaan malli:

    private final DefaultListModel listModelJasen = new DefaultListModel();
    ...
    /**
     * Tämä alustaa valitut alueet käyttökuntoon.
     */
    public void alusta() {
        // TODO: tätä voidaan vielä turhaan kutsua monta kertaa
        listJasenet.setModel(listModelJasen);
        ...
    }

1.2 Alkio yhdelle listan jäsenelle

Jotta voidaan näyttää eri teksti listassa kuin mitä jäsenen toString-metodi tekisi, mutta silti jotta voidaan helposti yhdistää klikattu nimi vastaavaan jäseneen, tehdään apuluokka, joka vastaa molempiin kysymyksiin:

    /**
     * Luokka johon talletetaan listaan laitettavat alkiot.
     * Ainoa tehtävä on pitää kiinni jäsenestä ja palauttaa jäsenen nimi merkkijonona  
     */
    private static class ListanAlkioJasen {
        private final Jasen jasen;


        public ListanAlkioJasen(Jasen jasen) {
            this.jasen = jasen;
        }


        public Jasen getJasen() {
            return jasen;
        }


        @Override
        public String toString() {
            return jasen.getNimi();
        }
    }

1.3 Listan tietojen täyttäminen

Nyt kun listaan tarvitsee saada tieto, voidaan se tehdä esimerkiksi seuraavasti:

    /**
     * Suorittaa niiden jäsenten hakemisen, joiden valittu kenttä täyttää hakuehdon
     * TODO: nyt haetaan vielä kaikki jäsenet
     */
    protected void hae() {
        listModelJasen.removeAllElements();

        for (Jasen jasen : kerho) 
            listModelJasen.addElement(new ListanAlkioJasen(jasen)); 
    }

1.4 Klikatun jäsenen tunnistaminen

Aluksi listan klikkausmetodi on alustamisvaiheessa yhdistetty sopivaan aliohjelmaan:

    /**
     * Tämä alustaa valitut alueet käyttökuntoon.
     */
    public void alusta() {
        listJasenet.setModel(listModelJasen);

        ...
 
        listJasenet.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                naytaJasen();
            }
        });
        ...
    }

Sitten kun klikkaus tapahtuu, otetaan klikattu jäsen ja näytetään vastaavat tiedot:

    /**
     * Näyttää listasta valitun jäsenen tiedot
     */
    protected void naytaJasen() {
        int ind = listJasenet.getSelectedIndex();
        if (ind < 0) return;
        ListanAlkioJasen alkio = ((ListanAlkioJasen)listModelJasen.get(ind)); // Pakko tehdä typecast koska get palauttaa Object-tyypin  
        jasenKohdalla = alkio.getJasen();
        areaJasen.setText("");
        PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen);
        tulosta(os, jasenKohdalla);    
    }

1.5 Uuden jäsenen lisäys

Uuden jäsenen lisäys on melkein helpointa tehdä niin, että jäsen lisätään suoraan Kerhon kautta ja sitten täytetään JList tämän jälkeen kokonaan uudelleen.

    public void uusiJasen() {
        jasenKohdalla = new Jasen();
        jasenKohdalla.rekisteroi();
        jasenKohdalla.vastaaAkuAnkka();
        try {
            kerho.lisaa(jasenKohdalla);
        } catch (SailoException e) {
            JOptionPane.showMessageDialog(null,
                    "Ongelmia lisäämisessä! " + e.getMessage());
        }
        hae(jasenKohdalla.getTunnusnro());
    }

2. fi.jyu.mit.gui -komponentit

  • katso gui-komponentit