Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Java lus met tekstvak

Pagina: 1
Acties:

  • masterrobo
  • Registratie: Augustus 2010
  • Laatst online: 20-11 15:32
Goedemiddag,


Ik probeer de tafel van 3 te laten verschijnen als je nummer 3 in het tekstvak invult. Het enige wat ik nu op het scherm krijg is het getal 30. Waarom laat hij de overige nummers niet zien?

Dit is mijn code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class h11 extends Applet {
    TextField tekstvak;
    int teller;
    int uitkomst;
    int y = 0;
    int getal;
    
    public void init() {
        tekstvak = new TextField("", 10);
        tekstvak.addActionListener( new TekstvakListener() );
        add(tekstvak);
    }
    public void paint(Graphics g) {
        g.drawString("" + uitkomst, 5, y );
    }
    class TekstvakListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String s = tekstvak.getText();
            getal = Integer.parseInt( s );
            if ( getal == 3 ) {
                for(teller = 1; teller < 11; teller++) {
            uitkomst= teller*3;
            y += 20;
            repaint();
            }
        }
    }
    }
}



Afbeeldingslocatie: http://i59.tinypic.com/nlzog9.jpg

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:57
Elke keer dat je repaint() aanroept, wordt de achtergrond wit getekend, en vervolgens wordt de paint() methode aangeroepen. Als je tien keer achter elkaar repaint is dus alleen het resultaat van de laatste operatie (10×3 = 30) zichtbaar.

Waarschijnlijk kun je je for-lus het beste naar de paint() methode verplaatsen.

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Ik zou in plaats daarvan een Label of TextArea plaatsen en de tekst daarvan updaten. Hoef je dat repainten allemaal niet zelf op te lossen.

Je zult wel tekst aan elkaar moet plakken om alle getallen te zien te krijgen, omdat het updaten zo snel gaat dat je de tussenresultaten niet zult zien.

[ Voor 41% gewijzigd door Herko_ter_Horst op 16-10-2014 18:06 ]

"Any sufficiently advanced technology is indistinguishable from magic."


  • Velth
  • Registratie: Oktober 2007
  • Laatst online: 07-11 20:10
Geen idee of je het al opgelost hebt, maar het volgende werkt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class h11 extends JApplet implements ActionListener {

    private JPanel panel;
    private TextField textField;

    @Override
    public void init() {
        super.init();

        this.setLayout(new BorderLayout());
        this.textField = new TextField("", 10);
        this.textField.addActionListener(this);
        this.add(this.textField, BorderLayout.NORTH);
        this.panel = new JPanel(new GridLayout(10, 0));
        this.add(this.panel, BorderLayout.CENTER);
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        final String s = textField.getText();
        final int number = Integer.parseInt(s);
        this.panel.removeAll();
        for (int i = 1; i < 11; i++) {
            final String outcome = "" + i * number;
            this.panel.add(new JLabel(outcome));
        }
        this.panel.revalidate();
    }

}


Zoals eerder gezegd in comments, het beste kun je het weergeven doen d.m.v. een JLabel.
Maar helaas ontkom je er niet aan om het panel opnieuw te laten tekenen (lees: Java de instructie geven om dit voor je te regelen).

*O* Afbeeldingslocatie: http://i60.tinypic.com/23qynud.jpg *O*

[ Voor 4% gewijzigd door Velth op 18-10-2014 23:06 ]