Класс текстового поля принимает только целые числа в Java - PullRequest
2 голосов
/ 09 марта 2010

Я просто хочу, чтобы текстовый класс принимал только целые числа ..

Я что-то сделал, но я думаю, что этого недостаточно.

Может кто-нибудь помочь мне, пожалуйста? Спасибо ...

import java.awt.TextField
public class textbox extends TextField{
    private int value;

    public textbox(){
        super();

    }

    public textbox(int value){
        setDeger(value);
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {

        this.value = value;
    }
}

Ответы [ 4 ]

2 голосов
/ 09 марта 2010

Я думаю, что вы упускаете суть, вот подсказка, с вашим кодом я все еще могу позвонить textfield.setText («я не число»);

1 голос
/ 09 марта 2010

Поскольку вы должны использовать TextArea, вы можете добиться успеха с TextListener.Добавьте слушателя, который ограничивает введенные символы только цифрами.

В псевдокоде метод события может сделать это:

  1. получить источник события
  2. определить текущую позицию курсора
  3. если символ в текущей позиции не является допустимым вводом, то
  4. удалить неверный символ
  5. сбросить текст в поле

Это проще сделать с JTextField, поскольку вы можете заменить документмодель или просто используйте JFormattedTextField.

0 голосов
/ 08 февраля 2012

Когда пользователь пытается ввести нечисловые данные, он отклоняет и удаляет ввод, который не является целым числом.

public class NumericTextField extends JTextField implements KeyListener{

    private int value;

    public NumericTextField(int value) {
        super(value+ "");
        this.addKeyListener(this);
    }
    public NumericTextField() {
        super();
        this.addKeyListener(this);
    }
    public Object getValue() {
        return value;
    }

    public void setText(int value) {
        super.setText(value + "");
        this.value = value;
    }

    @Override
    public void keyPressed(KeyEvent evt) {
    }
    @Override
    public void keyReleased(KeyEvent arg0) {
        isValidChar(arg0.getKeyChar());
    }
    @Override
    public void keyTyped(KeyEvent arg0) {
    }

     //it is not good solution but acceptable
    private void isValidChar(char ch){
        if(this.getText().length() == 1 && this.getText().equals("-") ){
            this.setText("-");
        }
        else {
            if(!isNumeric(Character.toString(ch))){
                try{
                    this.setText(removeNonnumericChar(this.getText(), ch));
                }catch(Exception e){
                }
            }
        }
    }

    private boolean isNumeric(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
    //remove nonnumeric character
    private String removeNonnumericChar(String text, char ch){
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            if(text.charAt(i) != ch){
                sBuilder.append(text.charAt(i));
            }
        }
        return sBuilder.toString();
    }
}

А это тестовый класс

public class NumericTextFieldTest extends JFrame {

    private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    NumericTextFieldTest frame = new NumericTextFieldTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public NumericTextFieldTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 200, 150);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        NumericTextField numericText = new NumericTextField();
        numericText.setBounds(25, 27, 158, 19);
        contentPane.add(numericText);
        numericText.setColumns(10);

        JLabel lblNumericTextfield = new JLabel("Numeric textField");
        lblNumericTextfield.setBounds(37, 12, 123, 15);
        contentPane.add(lblNumericTextfield);

    }
}
0 голосов
/ 09 марта 2010

Почему вы используете TextField? Почему бы вам не изучить Swing вместо AWT, тогда вы можете использовать JTextField. На самом деле вы можете использовать JFormattedTextField, который поддерживает это требование. Прочитайте API и перейдите по ссылке на учебник для примеров.

...