Java ja List-Listener

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).
6434
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

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.

Äänestä

  • 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);
       ...

    Äänestä

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

    Äänestä

  • 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

    Äänestä

  • 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
    }
    }

    Äänestä

Kommentoi aloitusta


sva kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu