Avatar billede Simon Praktikant
24. august 2005 - 15:22 Der er 5 kommentarer og
1 løsning

Tal felt i java

Hvad skal jeg bruge for at få et en-linies textfelt som kun kan indeholde hel-tal i java?

jeg har prøvet med:
TextField, men det er grimt, og her kan også være andet end tal
JEditorPane som ligeledes kan indeholde andet end tal
Avatar billede arne_v Ekspert
24. august 2005 - 15:28 #1
hvad med JFormattedTextField ?
Avatar billede simonvalter Praktikant
24. august 2005 - 18:22 #2
import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.DefaultFormatter;

public class BasicUI {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        IntegerFormatter formatter = new IntegerFormatter();
        formatter.setAllowsInvalid(false);

        JFormattedTextField tft1 = new JFormattedTextField(formatter);

        frame.getContentPane().add(tft1, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

}

class IntegerFormatter extends DefaultFormatter{

public Object stringToValue(String text) throws ParseException {
        Pattern pattern = Pattern.compile("\\d*");
        if (pattern != null) {
            Matcher matcher = pattern.matcher(text);

            if (matcher.matches()) {
                return super.stringToValue(text);
            }
            throw new ParseException("Pattern did not match", 0);
        }
        return text;
    }
}
Avatar billede _carsten Nybegynder
24. august 2005 - 18:23 #3
Det nemmeste er at bruge et JTextField, hvor du sætter et nyt Document.

Lav en klasse som extender PlainDocument og override insertString() og sæt dit JTextFields Document med setDocument(ny klasse()), på den måde forhindrer du andre tegn end tal, enten de tastes eller pastes i dit JTextField.

Se eksempel:



import java.awt.Toolkit;
import javax.swing.SwingConstants;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;


public class TalFelt extends javax.swing.JFrame {

    public TalFelt() {
        initComponents();
    }
   

    private void initComponents() {
        textField = new javax.swing.JTextField();

        getContentPane().setLayout(new java.awt.FlowLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        textField.setColumns(10);
        getContentPane().add(textField);

        textField.setDocument(new MyDocument());
        textField.setHorizontalAlignment(SwingConstants.RIGHT);

        pack();
    }

   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TalFelt().setVisible(true);
            }
        });
    }
   
    private javax.swing.JTextField textField; 
}


class MyDocument extends PlainDocument{
    public MyDocument(){
        toolkit = Toolkit.getDefaultToolkit();
    }
   
    public void insertString(int offs, String str, AttributeSet a)
                                        throws BadLocationException {
       
        if (str == null || str.equals(""))
            return;
     
        char c[] = str.toCharArray();
       
        for(int i = 0; i < c.length; i++){
            if (!Character.isDigit(c[i])){
                toolkit.beep();
                return;
            }
        }
       
        super.insertString(offs, new String(c), a);
    }
   
    private Toolkit toolkit;
}
Avatar billede _carsten Nybegynder
24. august 2005 - 18:28 #4
Sludder og vrøvl er gratis :)

-- "forhindrer du andre tegn end tal"

mener:    "sikrer du at kun tal kan tastes/pastes"
Avatar billede Simon Praktikant
16. august 2006 - 09:37 #5
smid et svar for point
Avatar billede _carsten Nybegynder
16. august 2006 - 10:17 #6
Nå - du ville ikke holde jubilæum på det spørgsmål :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester