Toon posts:

[Java] ActionListener werkt, KeyListener niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben nogal een newbie mbt java (1e jaars op school). De opdracht is om een rekenmachine te maken met behulp van een tekstvlak. Als er op Enter wordt gedrukt moet de som van de getallen die in het tekstvlak staan (dmv een spatie gescheiden) worden opgeteld en in een Label gezet.

Nu heb ik een probleempje, als ik een button aanmaak en deze de waarde laat optellen gaat alles goed, maar als ik het met de Enter knop doe geeft ie verkeerde waarden door? Hoe komt dit? Ziet java de enter toets ook voor een getal aan ofzo die erbij opgeteld wordt!?!?!

Alvast bedankt...:)

code:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.StringTokenizer;

public class Rekenmachine extends Applet implements ActionListener { //KeyListener
    
    TextField getalleninvoer;
    Label uitkomst;
    Button knop;
    private int totaal;
    private int verwissel;
    
    public void init() 
    {
        setLayout(null);
        uitkomst = new Label ("Totale waarde");
        uitkomst.setBounds(30,50,100,25);
        add(uitkomst);  
        
        getalleninvoer  = new TextField("");
        getalleninvoer.setBounds(150,50,200,25);
        add(getalleninvoer);
        //getalleninvoer.addKeyListener(this);
                
        knop    = new Button("Bereken totaal");
        knop.setBounds(150,150,200,25);
        add(knop);
        knop.addActionListener(this);
        
    }

    public void paint(Graphics g) 
    {
    }
    
//  public void keyTyped   (KeyEvent e){}
//  public void keyReleased(KeyEvent e){}

//  public void keyPressed(KeyEvent e)
    public void actionPerformed(ActionEvent e)
    {   
        StringTokenizer haaleruit = new StringTokenizer(getalleninvoer.getText(), " ");
                        
        while (haaleruit.hasMoreTokens())
        {                   
            verwissel = Integer.parseInt(haaleruit.nextToken().trim());             
            totaal = totaal + verwissel;            
        }   
            
//      if (e.getKeyCode() == e.VK_ENTER)
        if (e.getSource() == knop)
        {               
            uitkomst.setText(""+totaal);
            totaal = 0;
        }   
    }   
}

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

getalleninvoer.addActionListener(this);

Als je nu je getallen hebt ingevoerd en je drukt op enter zal hij je actionPerformed uitvoeren.

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Maar die voert hij dan ook uit bij alle andere acties op de getalleninvoer, zoals typen. Je moet dus in je actionPerformed nog even checken wat voor event het is.
Maar wat een betere oplossing is is de button die je gemaakt hebt instellen als default button, zodat hij reageert op de enterknop, ook als hij niet de focus heeft. In Swing zou ik het weten, hoe het met applets moet kun je veter even opzoeken in de documentatie.

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!