Ongelmia applettien kanssa

LCHawk

Hei! Yritin tehdä yksinkertaista Applettia, missä on kaksi tekstikenttää, joihin voi syöttää kokonaisluvun. Näistä pitäisi lukea luvut ja laskea ne yhteen ja sitten kirjoittaa vastaus. Koodi on seuraava:

import java.lang.Integer;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Yritys extends Applet {
// Luodaan ja alustetaan tekstikent‰t.
private TextField kentta1 = new TextField("");
private TextField kentta2 = new TextField("");
private TextArea kentta3 = new TextArea("");
private int luku,luku1,luku2;

public void init() {
// Lis‰t‰‰n tekstikent‰t paneeliin.
add(kentta1); add(kentta2); add(kentta3);
luku1=Integer.parseInt(kentta1.getText());
luku2=Integer.parseInt(kentta2.getText());
luku=luku1 luku2;
kentta3.setText("" luku);
}

}

Tämä ei toimi, vaan antaa ajon aikana virheen Applet not initializet. Mistä tämä johtuu? Yritin tehdä tätä myös toisella tavalla, joka on seuraava:

import java.lang.Integer;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Kokeillaan extends Applet {
// Luodaan ja alustetaan tekstikent‰t.
private TextField kentta1 = new TextField("");
private TextField kentta2 = new TextField("");
private TextArea kentta3 = new TextArea("", 5, 40, TextArea.SCROLLBARS_NONE);

public void init() {
// Luodaan ja lis‰t‰‰n tapahtumank‰sittelij‰t.
kentta1.addActionListener(new TapahtKasittelija());
kentta2.addActionListener(new TapahtKasittelija());
// Lis‰t‰‰n tekstikent‰t paneeliin.
add(kentta1); add(kentta2); add(kentta3);
}

/* Luokka tapahtumien k‰sittelyyn */
class TapahtKasittelija implements ActionListener {
int luku1=0,luku2=0, luku=0;
public void actionPerformed(ActionEvent tapaht) {
if (tapaht.getSource() == kentta1 ){
luku1=Integer.parseInt(tapaht.getActionCommand());

}

if(tapaht.getSource() == kentta2) {
luku2=Integer.parseInt(tapaht.getActionCommand());
}
luku=luku1 luku2;
kentta3.append("" luku);

}
}
}
Tämä kyllä lähtee käyntiin, mutta ei toimi oikein. Missä vika mahtaisi olla?

2

580

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • foobarfoo

      luku1=Integer.parseInt(tapaht.getActionCommand());
      Luulen et haluat lukea kentta1 tekstin, eli luku1=Integer.parseInt(kentta1.getText()); :-) Sama näyttää olevan luku2:n kohdalla

    • Javakko

      Jälkimmäisessä ohjelmassa ollaan enemmän oikeilla jäljillä. Tekstikenttiin pitää lisätä listener jotta tiedetään koska kenttien arvot muuttuu. Nyt kuitenkin molemmille tekstikentille tehdään oma listener-luokan ilmentymä joilla molemmilla on omat int luku1,luku2 arvot.

      Selkeintä ehkä olisi jos tekisi itse apletista myös tuon kuuntelijan:
      public class Kokeillaan extends Applet implements ActionListener

      actionPerformed metodissa ei tässä tapauksessa tarvitse minusta tutkia mistä action tuli tai tallentaa arvoja pysyviin muuttujiin. Luetaan vain tekstikenttien arvot ja lasketaan yhteen:
      int luku1=Integer.parseInt(kentta1.getText()),
      luku2=Integer.parseInt(kentta2.getText()),
      luku=luku1 luku2;

      Textareaan tekstiä lisätessä pitää myös muistaa itse lisätä rivinvaihdot tms erotinmerkit, muuten kaikki tulostuu yhteen pötköön:
      kentta3.append(luku "\n");

      Koko ohjelma näyttäisi siis sitten tältä:

      import java.awt.*;
      import java.awt.event.*;
      import java.applet.*;

      public class Kokeillaan extends Applet implements ActionListener {

      private TextField kentta1 = new TextField("");
      private TextField kentta2 = new TextField("");
      private TextArea kentta3 = new TextArea("", 5, 40, TextArea.SCROLLBARS_NONE);

      public void init() {
      kentta1.addActionListener(this);
      kentta2.addActionListener(this);
      add(kentta1); add(kentta2); add(kentta3);
      }

      public void actionPerformed(ActionEvent tapaht) {
      int luku1=Integer.parseInt(kentta1.getText()),
      luku2=Integer.parseInt(kentta2.getText()),
      luku=luku1 luku2;
      kentta3.append(luku "\n");
      }

      }

      Tuntuisi toimivankin. Tosin huomattavaa on että tekstikenttien action-tapahtuu vain kun käyttäjä painaa tekstikentässä enteriä. Eli pitää sitten luvun kirjoituksen jälkeen paina enter että mitään tapahtuu.

      Asian selkein korjaus olisi tietty lisätä painike "Laske" johon actionlistener liitetään ja yhteenlasku suoritetaan kun kyseistä painiketta klikataan.

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

    Luetuimmat keskustelut

    1. Veroaste on Suomessa viitisen prosenttiyksikköä liian matala

      Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka
      Maailman menoa
      116
      2985
    2. EU komissio - EU-elpymisrahoja voidaan käyttää TILAPÄISESTI väärin!

      Espanja ohjasi miljardeja euroja – Nyt EU-komissio teki yllättävän paljastuksen Skandaaliksi noussut Espanjan EU-rahoje
      Maailman menoa
      29
      1361
    3. Kultasi eka kirjain? Kuka haluaa

      A haluaa J
      Ikävä
      103
      1227
    4. Kristillinen kaste annetaa upotuskasteena

      Kristillinen upotuskaste perustuu juutalaiseen mikve-kasteeseen, jossa upottaudutaan veden alle kokonaan. Paavali vertas
      Kaste
      162
      1017
    5. Koko kansan kaste Punaisen meren ylityksen aikana

      Koko Israelin 2,5 milj.kansa sai kasteen ja Pyhän Hengen lahjan ylittäessän Punaisen meren. 1.Kor.10 1 Sillä minä en ta
      Kaste
      366
      1007
    6. Empaattisuus ja suoruus.

      Tässä tullut noita pehmeitä asioita pohdittua, mutta toisaalta olen myös yksinkertainen mies. Pidän suoruudestakin. Mi
      Sinkut
      133
      978
    7. Nainen, mikset lähetä

      miehelle viestiä? Tiedän, että sulla on asiaa ja kysyttävää.
      Ikävä
      56
      875
    8. Sä saat mut tuntemaan

      Jotain sellaista mitä ei saisi tuntea mutta må en mahda tälle mitään. Mulla on ikävä niitä meidän katseita ja sitä tunne
      Ikävä
      22
      703
    9. Ehkä vähän

      Rakastunut sinuun
      Ikävä
      40
      698
    10. Tunnettujen vanhempien lapset, tv-sarja

      Tunnettujen vanhempien lapset saa tv-sarjan. Juurihan yksi heistä oli MTV:ssä 6.5.26 kertomassa ettei halua julkisuutta
      Kotimaiset julkkisjuorut
      110
      642
    Aihe