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).
Java ja List-Listener
6
427
Vastaukset
- 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
Noh, tein niinkuin käskit:
http://koti.mbnet.fi/sakvaka/ohjelmointiongelma/HeViListindex.java
Ohjelma kääntyy loistavasti, mutta suoritus tökkii;
missä vika? - 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;iJos 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
Kelekkakisat
Mikä vakava onnettomuus sattunut kisoissa. On peruttu koko kisat. Pelastuskopteri näytti käyvän paikalla.3511437- 639870
- 1475580
- 1443784
- 753750
Virkamiehille tarvitaan tuntuvat palkankorotukset
Naistenpäivänä on syytä muistuttaa, että virkamiehen euro on vain 80 senttiä. Palkat tulee saattaa samalle tasolle yksi373635- 403378
Riikka Purran kaudella nousi bensan hinta yli 2 euron
Muistatteko kuinka edellisen vasemmistohallituksen aikana, ns. Marinin aikakaudella, bensiiniä sai 1,3 euron litrahinnal243183- 632793
Olisipa saanut sinuun
Tutustua paremmin. Harmi että aloin lopulta jännittämään kun näytit tunteesi niin voimakkaasti ja lähestyit niin voimaak792603