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

540

    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. YLE Äänekosken kaupunginjohtaja saa ankaraa arvostelua

      Kaupungin johtaja saa ankaraa kritiikkiä äkkiväärästä henkilöstöjohtamisestaan. Uusin häirintäilmoitus päivätty 15 kesä
      Äänekoski
      91
      1929
    2. Euroopan lämpöennätys, 48,8, astetta, on mitattu Italian Sisiliassa

      Joko hitaampikin ymmärtää. Se on aivan liikaa. Ilmastonmuutos on totta Euroopassakin.
      Maailman menoa
      278
      1761
    3. Asiakas iski kaupassa varastelua tehneen kanveesiin.

      https://www.iltalehti.fi/kotimaa/a/33a85463-e4d5-45ed-8014-db51fe8079ec Oikein. Näin sitä pitää. Kyllä kaupoissa valtava
      Maailman menoa
      305
      1560
    4. Martina lähdössä Ibizalle

      Eikä Eskokaan tiennyt matkasta. Nyt ollaan jännän äärellä.
      Kotimaiset julkkisjuorut
      180
      1442
    5. Jos ei tiedä mitä toisesta haluaa

      Älä missään nimessä anna mitään merkkejä kiinnostuksesta. Ole haluamatta mitään. Täytyy ajatella toistakin. Ei kukaan em
      Ikävä
      88
      1038
    6. Määpä tiijän että rakastat

      Minua nimittäin. Samoin hei! Olet mun vastakappaleeni.
      Ikävä
      51
      1007
    7. Avustikset peruttu.

      Aettokosken ampuraan rahat otettu poekkeen valtiolle.
      Suomussalmi
      56
      977
    8. Se nainen näyttää hyvältä vaikka painaisi 150kg

      parempi vaan jos on vähän muhkeammassa kunnossa 🤤
      Ikävä
      56
      968
    9. 67
      944
    10. Miksi mies tuntee näin?

      Eli olen mies ja ihastuin naiseen. Tykkään hänestä ja koskaan hän ei ole ollut minulle ilkeä. Silti ajoittain tunnen kui
      Ikävä
      40
      941
    Aihe