Buttons die getallen weergeven in textfield

Status
Niet open voor verdere reacties.

BarBje

Nieuwe gebruiker
Lid geworden
13 mei 2008
Berichten
3
Hoi, ik wil een programmaatje schrijven met drie buttons (met een 1, een 2 en een 3.

Als er op knop 1 geklikt is, moet er in het tekstveld 1 komen te staan, als er daarna op 2 gedrukt wordt moet er 12 komen te staan etc. De bedoeling is om een geheime code te raden. Ik krijg na lang puzzelen geen foutmeldingen meer maar het lukt me maar niet om inderdaad als ik op knop 1 klik ook in het tekstveld 1 te krijgen. Ik heb nu maar helemaal mijn pogingen om de button tot actie over te laten gaan weggelaten. Of ik krijg foutmeldingen dat er tekst moet staan ipv een int of hij haalt de 1 weg zodra ik op twee klik. Is er iemand die mij op weg kan helpen?



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener {
private JLabel lab1, lab2;
private JButton b1,b2,b3,b4;
private JTextField tf;
private final int geheimecode = 11231;
private int teller = 0;

public MyFrame () {
Container c = getContentPane ();
c.setLayout (new FlowLayout () );

lab1 = new JLabel ("Raad de geheime code"); c.add(lab1);
b1 = new JButton (" 1 "); c.add (b1);
b1.addActionListener (this);
b2 = new JButton (" 2 "); c.add (b2);
b2.addActionListener (this);
b3 = new JButton (" 3 "); c.add (b3);
b3.addActionListener (this);
tf = new JTextField (15); c.add (tf);
lab2 = new JLabel ("Hier komt de uitvoer"); c.add (lab2);
b4 = new JButton ("clear"); c.add (b4);
b4.addActionListener (this);

setSize (200, 150);
setVisible (true);
setDefaultCloseOperation (EXIT_ON_CLOSE);
}

public void actionPerformed (ActionEvent e) {

String s= tf.getText ();
for (int i=1; i<= 3; i++){
s = s + Integer.toString (i);
}


if (s.equals (geheimecode)) {
lab2.setText ("Yes! geraden");
}
else {
lab2.setText ("De kluis blijft dicht");
}


if (e.getSource () == b4) {
teller = 0;
tf.setText(" ");
}
}
}
 
Laatst bewerkt:
Ten eerste je zegt nergens dat het in het uitvoerveld moet komen te staan.
Ten tweede snap ik de lus niet helemaal. Volgens mij krijg je dan 123 in je uitvoer te staan ipv het getal op de knop. Doe dit op de zelfde manier als je met de clear knop hebt gedaan:

Code:
s=tf.getText();
if(e.getSource() == b2){
    s=s+2;
    tf.setText(s);
}

en ten derde werkt de lijn "if (s.equals (geheimecode)) {" blijkbaar niet.
Probeer het eens als integers te vergelijken, en niet als Strings, dan werkt hij hier wel
(Gebruik Integer.parseInt(s) )

Als je het niet snapt hoor ik het nog wel!
 
Dank je, ik bleef gisteren maar hetzelfde uitproberen, hij doet het nu, heerlijk gevoel :-).

Code is nu als volgt geworden:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener {
private JLabel lab1, lab2;
private JButton b1,b2,b3,b4;
private JTextField tf;
private final int geheimecode = 11231;
private int teller = 0;

public MyFrame () {
Container c = getContentPane ();
c.setLayout (new FlowLayout () );

lab1 = new JLabel ("Raad de geheime code"); c.add(lab1);
b1 = new JButton (" 1 "); c.add (b1);
b1.addActionListener (this);
b2 = new JButton (" 2 "); c.add (b2);
b2.addActionListener (this);
b3 = new JButton (" 3 "); c.add (b3);
b3.addActionListener (this);
tf = new JTextField (15); c.add (tf);
lab2 = new JLabel ("Hier komt de uitvoer"); c.add (lab2);
b4 = new JButton ("clear"); c.add (b4);
b4.addActionListener (this);

setSize (400, 300);
setVisible (true);
setDefaultCloseOperation (EXIT_ON_CLOSE);
}

public void actionPerformed (ActionEvent e) {


String s = tf.getText ();
s=tf.getText ();
if(e.getSource() == b1){
s=s+1;
tf.setText(s);
}

s=tf.getText ();
if(e.getSource() == b2){
s=s+2;
tf.setText(s);
}
s=tf.getText ();
if(e.getSource() == b3){
s=s+3;
tf.setText(s);


}
String s1 = tf.getText ();
int geheimecode = Integer.parseInt (s1);
if (geheimecode == 11231){
lab2.setText ("Yes! geraden");
}
else {
lab2.setText ("De kluis blijft dicht");
}
String s2 = tf.getText ();
s2=tf.getText ();
if (e.getSource () == b4) {
teller = 0;
tf.setText("");

}

}
}
 
ja zo kan het inderdaad ook. Ik kwam op het volgende uit:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener {
private JLabel lab1, lab2;
private JButton b1,b2,b3,b4;
private JTextField tf;
private final int geheimecode = 11231;
private int teller = 0;

public MyFrame () {
Container c = getContentPane ();
c.setLayout (new FlowLayout () );

lab1 = new JLabel ("Raad de geheime code"); c.add(lab1);
b1 = new JButton (" 1 "); c.add (b1);
b1.addActionListener (this);
b2 = new JButton (" 2 "); c.add (b2);
b2.addActionListener (this);
b3 = new JButton (" 3 "); c.add (b3);
b3.addActionListener (this);
tf = new JTextField (15); c.add (tf);
lab2 = new JLabel ("Hier komt de uitvoer"); c.add (lab2);
b4 = new JButton ("clear"); c.add (b4);
b4.addActionListener (this);

setSize (200, 150);
setVisible (true);
setDefaultCloseOperation (EXIT_ON_CLOSE);
}

public void actionPerformed (ActionEvent e) {

    
    String s = tf.getText();
    if(e.getSource() == b1)
    {
        tf.setText(s + 1);
    }
    
    if(e.getSource() == b2)
    {
        tf.setText(s + 2);
    }
    
    if(e.getSource() == b3)
    {
        tf.setText(s + 3);
    }
s = tf.getText();
    
[COLOR="Red"]if (Integer.parseInt(s) == geheimecode) {[/COLOR]
lab2.setText ("Yes! geraden");
}
else {
lab2.setText ("De kluis blijft dicht");
}


if (e.getSource () == b4) {
teller = 0;
tf.setText(" ");
s = "";
}
}
}

veel verschil zit er eigenlijk niet in, behalve de rode regel :p

Ik snap alleen niet waarom je 'teller' als int erbij hebt staan,, die gebruik je toch niet? Of ga je die nog gebruiken oid?
 
Laatst bewerkt:
Nee, ik dacht dat dat moest omdat ik hem voor knop 4 gebruik, verder geen reden voor gehad.
 
ja je gebruikt hem bij knop 4 om hem weer op 0 te zetten, terwijl hij altijd 0 is :p Nja succes verder :D :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan