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

535

    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. Miksi et irrota otettasi

      Suhteeni?
      Ikävä
      104
      3384
    2. Koko ajan olet

      Senkin suhteen kiusannut. Halut on ihan mielettömät olleet jo pitkään
      Ikävä
      88
      3073
    3. Tykkään susta

      Elämäni loppuun asti. Olet niin suuresti siihen vaikuttanut. Tykkäsit tai et siitä
      Ikävä
      20
      1933
    4. Muutama syy

      Sille miksi IRL kohtaaminen on hänelle vaikeaa
      Ikävä
      69
      1906
    5. Onko kaikki hyvin, iso huoli sinusta

      Miten jakselet? Onko sattunut jotain ikävää. Naiselta
      Ikävä
      38
      1857
    6. Estitkö sä minut

      Oikeasti. Haluatko, että jätän sun ajattelemisen? :3
      Ikävä
      21
      1741
    7. Onko kaivatullasi

      Hyvä vai huono huumorintaju?
      Ikävä
      24
      1687
    8. Pettymys! Tähdet, tähdet -kisassa tämä erikoisjakso pois - Pistänyt artistit todella lujille!

      Tähdet, tähdet -kisa on edennyt genrestä toiseen. Mutta erästä monen toivomaa erikoisjaksoa ei tällä kaudella nähdä. Voi
      Tv-sarjat
      34
      1439
    9. Onko meillä

      Molemmilla nyt hyvät fiilikset😢ei ainakaan mulla mutta eteenpäin on mentävä😏ikävä on, kait se helpottaa ajan myötä. Ko
      Ikävä
      9
      1349
    10. Tiedätkö tykkääkö

      Kaivatustasi siinä mielessä joku muukin kuin sinä itse
      Ikävä
      48
      1337
    Aihe