Java ja List-Listener

sva

Tässä koodi:
http://koti.mbnet.fi/sakvaka/ohjelmointiongelma/HeVit.java

En ole ainakin kymmenen yrityksen jälkeenkään saanut lisättyä tähän java-koodiin siitä puuttuvaa ListSelectionListeneriä. Olen katsonut netistä apuja, mutta niistä en ole kostunut.

Voisiko joku auttaa?

Ohjelman tarkoituksena olisi että vasemmalta voisi valita hedelmän/vihanneksen nimen ja oikealla näkyisi sen kuva (referenssikuvia ei liitetty).

6

427

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Piru

      Eihän tuossa koodissa oltu mitään kuuntelijaa lisätty mihinkään?

      No kuitenkin.

      Voisit tehdä oman kuuntelijaluokan erikseen tai sitten käyttää tätä HeVit-luokkaa sen listan kuuntelijana.

      Luokan pitäisi silloin toteuttaa rajapinta

      ListSelectionListener

      public class HeVit extends JFrame implements ListSelectionListener {

      Sen jälkeen luokkaasi pitää tehdä toteutus tuon rajapinnan metodille valueChanged(ListSelectionEvent e)

      Eli vaikka näin

      public void valueChanged(ListSelectionEvent e) {
      if (e.getValueIsAdjusting() == false) {

      if (lista.getSelectedIndex() == -1) {
      //No selection, disable fire button.
      butSulje.setEnabled(false);

      } else {
      //Selection, enable the fire button.
      butSulje.setEnabled(true);
      }
      }
      }
      Nyt luokkasi HeVit pystyy toimimaan listan kuuntelijana. Pistät vaikka konstruktorissa luokkasi kuuntelemaan listan eventtejä.

      lista.addListSelectionListener(this);

      Jos tuon antamat kontrollit ei riitä, niin voi koittaa lisätä siihen ActionListenerin tai MouseListenerin.

      • sva

      • plaah
        sva kirjoitti:

        Noh, tein niinkuin käskit:

        http://koti.mbnet.fi/sakvaka/ohjelmointiongelma/HeViListindex.java

        Ohjelma kääntyy loistavasti, mutta suoritus tökkii;
        missä vika?

        Se ei toimi, koska et ole alustanut luokan yleisiä attribuutteja (lista, sipuli, choice, jne.). Siis ei näin:

           ...
           ImageIcon sipuli = new ImageIcon("kuvat/sipuli.gif");
           JButton butSulje = new JButton(sulje);
           ...

        Vaan näin:

           ...
           sipuli = new ImageIcon("kuvat/sipuli.gif");
           butSulje = new JButton(sulje);
           ...


      • sva
        plaah kirjoitti:

        Se ei toimi, koska et ole alustanut luokan yleisiä attribuutteja (lista, sipuli, choice, jne.). Siis ei näin:

           ...
           ImageIcon sipuli = new ImageIcon("kuvat/sipuli.gif");
           JButton butSulje = new JButton(sulje);
           ...

        Vaan näin:

           ...
           sipuli = new ImageIcon("kuvat/sipuli.gif");
           butSulje = new JButton(sulje);
           ...

        Nyt se toimii. On kyllä ollut aiemminkin ongelmia noiden uudelleenalustuksien kanssa, mutta jotenkin se ei vain tunnu menevän minulle jakeluun..


      • Piru
        sva kirjoitti:

        Nyt se toimii. On kyllä ollut aiemminkin ongelmia noiden uudelleenalustuksien kanssa, mutta jotenkin se ei vain tunnu menevän minulle jakeluun..

        vaan pelkästään alustuksesta.

        Jos luokan alussa määrittelet muuttujan

        public class Testi{

        String mjono;

        Niin sen arvo on null. Sitä ei siis ole alustettu. Yleensä on sitten tapana, että konstruktorissa se muuttuja alustetaan.

        public Testi()
        {
        mjono = new String("jee");
        //tai hienosti this.mjono = "jee";
        }

        tuo mjono on siis voimassa kaikissa metodeissa luokan sisällä. Nyt jos koodaat näin siellä kontruktorissa

        String mjono = "Jee";

        Niin et enää alustakaan sitä luokan alussa olevaa muuttujaa, vaan luot uuden, joka on voimassa vain konstruktorissa. Luokan mjono on siis edelleen null ja konstruktorin mjono on "Jee".

        Tämä kannattaa kyllä painaa mieleen, tai tulee paljon harmaita hiuksia.

        Tässä vielä esimerkkiluokka

        public class Testi
        {
        String mjono = "luokan-mjono";

        public Testi()
        {
        String mjono = "Konstruktorin-mjono";
        System.out.println(mjono);
        //tulostaa Konstruktorin-mjono

        if(true)
        {
        String mjono = "konst. iffin-mjono";
        System.out.println(mjono);
        //tulostaa konst. iffin-mjono
        System.out.println(this.mjono);
        //tulostaa luokan-mjono

        }
        mjono = "Toinen konstruktorin-mjono";
        }
        System.out.println(mjono);
        //tulostaa luokan-mjono


        }

        Eli vaikka muuttujan nimi on aina sama mjono, niin tarkoitetaankin eri muuttujaa rippuen siitä, että missä se on määritelty. Aaltosulkeiden sisällä määritelty muuttuja on voimassa vain niiden aaltosulkeiden sisässä.

        {
        String eka="123123";

        for(int i=0;i


      • Piru
        Piru kirjoitti:

        vaan pelkästään alustuksesta.

        Jos luokan alussa määrittelet muuttujan

        public class Testi{

        String mjono;

        Niin sen arvo on null. Sitä ei siis ole alustettu. Yleensä on sitten tapana, että konstruktorissa se muuttuja alustetaan.

        public Testi()
        {
        mjono = new String("jee");
        //tai hienosti this.mjono = "jee";
        }

        tuo mjono on siis voimassa kaikissa metodeissa luokan sisällä. Nyt jos koodaat näin siellä kontruktorissa

        String mjono = "Jee";

        Niin et enää alustakaan sitä luokan alussa olevaa muuttujaa, vaan luot uuden, joka on voimassa vain konstruktorissa. Luokan mjono on siis edelleen null ja konstruktorin mjono on "Jee".

        Tämä kannattaa kyllä painaa mieleen, tai tulee paljon harmaita hiuksia.

        Tässä vielä esimerkkiluokka

        public class Testi
        {
        String mjono = "luokan-mjono";

        public Testi()
        {
        String mjono = "Konstruktorin-mjono";
        System.out.println(mjono);
        //tulostaa Konstruktorin-mjono

        if(true)
        {
        String mjono = "konst. iffin-mjono";
        System.out.println(mjono);
        //tulostaa konst. iffin-mjono
        System.out.println(this.mjono);
        //tulostaa luokan-mjono

        }
        mjono = "Toinen konstruktorin-mjono";
        }
        System.out.println(mjono);
        //tulostaa luokan-mjono


        }

        Eli vaikka muuttujan nimi on aina sama mjono, niin tarkoitetaankin eri muuttujaa rippuen siitä, että missä se on määritelty. Aaltosulkeiden sisällä määritelty muuttuja on voimassa vain niiden aaltosulkeiden sisässä.

        {
        String eka="123123";

        for(int i=0;i

        Jos luokassa on muuttuja eka ja metodissa/lohkossa on myös paikallinen muuttuja eka, niin ne voi erottaa toisistaan this-määreellä. Sillä kerrot Javalle, että haluatkin muuttaa luokan muuttujaa etkä sitä paikallista.

        public class Testi
        {

        String eka ="123123";

        public Testi()
        {
        String eka ="321312"; //voimassa vain konst.
        this.eka = "8888"; //muutit luokan muuttujaa

        eka = "66666"; //muutit kosnt. paikallista

        String eka ="9999"; //aiheuttaa virheen
        //koska ei voi olla kahta saman nimistä paikallista
        }
        }


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kelekkakisat

      Mikä vakava onnettomuus sattunut kisoissa. On peruttu koko kisat. Pelastuskopteri näytti käyvän paikalla.
      Nivala
      35
      11437
    2. Aivan kauheaa

      Veikö koskiuoma taas ihmishengen? Se pitää kieltää!
      Imatra
      63
      9870
    3. Onko kaivattusi

      …mielestäsi älykäs, tai kenties tyhmä? Oma mielipide.
      Ikävä
      147
      5580
    4. Kuinka pitkä välimatka

      on teidän kotien välillä?
      Ikävä
      144
      3784
    5. Epäilen ettet edes

      Kehtaisi liikkua kanssani.
      Ikävä
      75
      3750
    6. Virkamiehille tarvitaan tuntuvat palkankorotukset

      Naistenpäivänä on syytä muistuttaa, että virkamiehen euro on vain 80 senttiä. Palkat tulee saattaa samalle tasolle yksi
      Maailman menoa
      37
      3635
    7. Oletko huomannut

      Yhden muutoksen?
      Ikävä
      40
      3378
    8. Riikka Purran kaudella nousi bensan hinta yli 2 euron

      Muistatteko kuinka edellisen vasemmistohallituksen aikana, ns. Marinin aikakaudella, bensiiniä sai 1,3 euron litrahinnal
      Maailman menoa
      24
      3183
    9. Jäikö meidän välit

      Mielestäsi Kesken?
      Ikävä
      63
      2793
    10. Olisipa saanut sinuun

      Tutustua paremmin. Harmi että aloin lopulta jännittämään kun näytit tunteesi niin voimakkaasti ja lähestyit niin voimaak
      Ikävä
      79
      2603
    Aihe