[java] bepaalde karakters niet

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

  • addictive
  • Registratie: Maart 2003
  • Laatst online: 19-05 11:07
beetje vreemde topic titel, maarja...

Ik ben bezig met een praktische opdracht voor informatica, mijn aplet werkt, maar ik wil nog wat extra functionaliteit inbouwen, namelijk:

Er zijn 4 velden. 2 voor namen en twee voor getallen.
Nou wil ik dat wanneer iem. een getal in het naamveld typt, dat 'ie dat niet kan doen.

En wanneer iem. een letter in het getalveld typt, dat ' ie dat ook niet kan doen.

Maar hoe moet dat?

Alvast bedankt!

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Ben geen java man, maar bij een onchange van een textveld matchen tegen de regular expression /^[\d]/ en als ie matched dan terugveranderen of een biepje geven?

Andersom: /^[\D]/ (alleen cijfers)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als je een JTextField gebruikt kun je de Document daarvoor gebruiken. Het is dan zaak om een bestaande document (het model van een JTextField) te extenden en de insertString(....) methode te overriden (uit mijn blote hoofd). Je kunt dan zelf functionaliteit toevoegen. Zoek anders maar eens op IntegerDocument ofzo, daarin zie je wel hoe ze ervoor zorgen dat je alleen integer kunt invullen.

Je kunt eventueel ook even kijken naar de JFormattedTextField.

[ Voor 4% gewijzigd door Alarmnummer op 10-03-2004 15:05 ]


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Lang geleden heb ik eens een JIntegerTextField die precies de methode van Alarmnummer gebruikt. Het design is helaas erg flexibel en uitgebreid, waardoor je niet echt makkelijk 1 file kan downloaden. Het JIntegerTextField is beschikbaar in Subversion. Je zal zelf de benodigde files moeten downloaden (allemaal in dezelfde repo) of alleen de relevante fragmenten overnemen als je je weg kan vinden.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Kijk anders eens naar java.awt.event.InputMethodListener of javax.swing.InputVerifier

Die laatste werkt pas wanneer je met tab het component wilt verlaten, dus is niet bestand tegen mouseclicks.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Er staat bij Sun een mooi artikeltje online wat de IntegerDocument methode samenvat:

Validating Numerical Input in a JTextField and Working with Fonts

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Oude code :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class IntegerDocument extends PlainDocument {

    private Toolkit toolkit = Toolkit.getDefaultToolkit();

    public IntegerDocument() {
    }

    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if (str.length() == 0)
            return;

        try {
            String s = getText(0, getLength()) + str;

            new Integer(s);

            super.insertString(offs, str, a);
        } catch (NumberFormatException e) {
            System.out.println(str);
            toolkit.beep();
        }
    }
}

[ Voor 54% gewijzigd door Alarmnummer op 10-03-2004 15:18 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

mbravenboer schreef op 10 maart 2004 @ 15:14:
Er staat bij Sun een mooi artikeltje online wat de IntegerDocument methode samenvat:

Validating Numerical Input in a JTextField and Working with Fonts
Using a FocusListener instead of a KeyListener provides a slightly different behavior. Where the KeyListener verifies each keystroke, the FocusListener validates the input when the focus on the input field is lost. Because it verifies the whole field, this technique simply involves parsing the input with the parseInt() method of Integer. In fact, the input value doesn't matter. What does matter is that you can parse the input.
Dat is nou precies waar de InputVerifier voor is :/

Edit: dat staar daar vlak onder |:(
Beter lezen de volgende keer.

[ Voor 26% gewijzigd door Robtimus op 10-03-2004 15:23 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • addictive
  • Registratie: Maart 2003
  • Laatst online: 19-05 11:07
Oké, bedankt, ik ga het eens proberen

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Ik heb dit laatst opegelost door een JFormattedTextField met daaraan een NumberFormat gehangen, dat lijkt mij iets makkelijker.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • addictive
  • Registratie: Maart 2003
  • Laatst online: 19-05 11:07
Ik kom er niet uit. Ik heb geen idee waar ik dat tussen moet zetten. Kunnen jullie mij helpen?


Dit is de broncode van mijn aplet:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
///////////////////////////////////////////////////
//                                               //
// Informatie:                                   //
// ~~~~~~~~~~~                                   //
//                                               //
// Naam:  Mick Benjamins                         //
// Klas:  H4p                                    //
// Datum: 9 maart 2004                           //
// Uiterlijke inleverdatum: 21 april 2004        //
//                                               //
// Dit is de broncode van de Praktische Opdracht //
// en dient ter afronding van hoofdstuk 3 van    //
// het lesboek (Turing)                          //
//                                               //
///////////////////////////////////////////////////



/*
    A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;
import symantec.itools.multimedia.ImageViewer;

public class Versie1 extends Applet
{
    public void init()
    {
        // Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
        symantec.itools.lang.Context.setApplet(this);
    
        // This code is automatically generated by Visual Cafe when you add
        // components to the visual environment. It instantiates and initializes
        // the components. To modify the code, only use code syntax that matches
        // what Visual Cafe can generate, or Visual Cafe may be unable to back
        // parse your Java file into its visual environment.
        //{{INIT_CONTROLS
        setLayout(null);
        setSize(540,432);
        add(naam1);
        naam1.setBackground(java.awt.Color.white);
        naam1.setBounds(60,108,156,24);
        add(naam2);
        naam2.setBackground(java.awt.Color.white);
        naam2.setBounds(60,204,156,24);
        add(leeftijd1);
        leeftijd1.setBackground(java.awt.Color.white);
        leeftijd1.setBounds(324,108,156,24);
        add(leeftijd2);
        leeftijd2.setBackground(java.awt.Color.white);
        leeftijd2.setBounds(324,204,156,24);
        button_uitvoeren.setLabel("Opdracht uitvoeren");
        add(button_uitvoeren);
        button_uitvoeren.setBackground(java.awt.Color.lightGray);
        button_uitvoeren.setBounds(60,264,156,24);
        uitvoer.setEditable(false);
        add(uitvoer);
        uitvoer.setBackground(new java.awt.Color(230,230,230));
        uitvoer.setBounds(60,336,420,24);
        label1.setText("Geef voornaam 1:");
        add(label1);
        label1.setBounds(60,84,122,26);
        label2.setText("Geef voornaam 2:");
        add(label2);
        label2.setBounds(60,180,122,26);
        label3.setText("Geef leeftijd 1:");
        add(label3);
        label3.setBounds(324,84,122,26);
        label4.setText("Geef leeftijd 2:");
        add(label4);
        label4.setBounds(324,180,122,26);
        maak_leeg.setLabel("Maak velden leeg");
        add(maak_leeg);
        maak_leeg.setBackground(java.awt.Color.lightGray);
        maak_leeg.setBounds(324,264,156,24);
        try {
            po_logo.setImageURL(symantec.itools.net.RelativeURL.getURL("po_logo.jpg"));
        }
        catch (java.net.MalformedURLException error) { }
        catch(java.beans.PropertyVetoException e) { }
        add(po_logo);
        po_logo.setBounds(0,0,540,60);
        label5.setText("Praktische Opdracht informatica schooljaar 2003-2004");
        add(label5);
        label5.setFont(new Font("Dialog", Font.BOLD, 12));
        label5.setBounds(120,372,324,24);
        label6.setText("Gemaakt door: Mick Benjamins (mick@zenid.net)");
        add(label6);
        label6.setFont(new Font("Dialog", Font.PLAIN, 12));
        label6.setBounds(144,396,276,24);
        //}}
    
        //{{REGISTER_LISTENERS
        SymAction lSymAction = new SymAction();
        button_uitvoeren.addActionListener(lSymAction);
        maak_leeg.addActionListener(lSymAction);
        //}}
    }
    
    // De code hieronder dient om de textvelden etc te maken,
    // en ze een plaats in het applet te geven
    
    //{{DECLARE_CONTROLS
    java.awt.TextField naam1 = new java.awt.TextField();
    java.awt.TextField naam2 = new java.awt.TextField();
    java.awt.TextField leeftijd1 = new java.awt.TextField();
    java.awt.TextField leeftijd2 = new java.awt.TextField();
    java.awt.Button button_uitvoeren = new java.awt.Button();
    java.awt.TextField uitvoer = new java.awt.TextField();
    java.awt.Label label1 = new java.awt.Label();
    java.awt.Label label2 = new java.awt.Label();
    java.awt.Label label3 = new java.awt.Label();
    java.awt.Label label4 = new java.awt.Label();
    java.awt.Button maak_leeg = new java.awt.Button();
    symantec.itools.multimedia.ImageViewer po_logo = new symantec.itools.multimedia.ImageViewer();
    java.awt.Label label5 = new java.awt.Label();
    java.awt.Label label6 = new java.awt.Label();
    //}}



    // Hieronder worden de 2 knoppen aangemaakt
    
    class SymAction implements java.awt.event.ActionListener
    {
        public void actionPerformed(java.awt.event.ActionEvent event)
        {
            Object object = event.getSource();
            if (object == button_uitvoeren)
                buttonUitvoeren_ActionPerformed(event);
            else if (object == maak_leeg)
                maakLeeg_ActionPerformed(event);
        }
    }

    void buttonUitvoeren_ActionPerformed(java.awt.event.ActionEvent event)
    {
        String var_naam1; // maak een string met de naam 'var_naam1'
        var_naam1 = naam1.getText(); // haal de tekst uit het veld met de naam 'invoer_naam1'
        String var_naam2; // maak een string met de naam 'var_naam2'
        var_naam2 = naam2.getText(); // haal de tekst uit het veld met de naam 'invoer_naam2'
        String var_getal1; // String aanmaken, en noem die 'var_getal1'
        String var_getal2; // String aanmaken, en noem die 'var_getal2'
        var_getal1 = leeftijd1.getText(); //Haal een waarde uit het textveld met de naam 'leeftijd1' en ken die toe aan 'var_getal1'
        var_getal2 = leeftijd2.getText(); //Haal een waarde uit het textveld met de naam 'leeftijd2' en ken die toe aan 'var_getal2'
        int getal1 = Integer.parseInt(var_getal1); // zet de waardes om naar getallen
        int getal2 = Integer.parseInt(var_getal2); // zet de waardes om naar getallen
        int totaal = getal1 + getal2; // Tel de getallen bij elkaar op en noem ze 'totaal'
        String helenaam; // maak een string met de naam 'helenaam'
        helenaam = var_naam1 + " en " + var_naam2 + " zijn samen " + totaal + " jaar oud"; // voeg de invoervelden samen, en maak er zo een zin van. Noem deze zin 'helemaal'
        uitvoer.setText(helenaam); // zet de zin die gemaakt is in het veld genaamd 'uitvoer'
    }

    void maakLeeg_ActionPerformed(java.awt.event.ActionEvent event)
    {
        naam1.setText(""); // Maak het veld met de naam 'naam1' leeg
        naam2.setText(""); // Maak het veld met de naam 'naam2' leeg
        leeftijd1.setText(""); // Maak het veld met de naam 'leeftijd1' leeg
        leeftijd2.setText(""); // Maak het veld met de naam 'leeftijd2' leeg
        uitvoer.setText(""); // Maak het veld met de naam 'uitvoer' leeg
    }
}

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je gebruikt AWT, geen Swing. Met AWT kan je dit wel vergeten. Het enige wat je kan doen is de inhoud van het veld controleren als de gebruiker een aktie onderneemt. Het volledig onmogelijk maken van een bepaalde input is niet mogelijk met AWT.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • addictive
  • Registratie: Maart 2003
  • Laatst online: 19-05 11:07
AWT? Swing? hmz... geen idee. Het is gewoon een school opdracht, hij werkt naar behoren. maar ik heb wat extra dingetjes erin gezet, een clear button bv
Pagina: 1