Класс текстового поля принимает только целые числа в Java

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

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

Кто-нибудь может мне помочь? Спасибо...

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;
    }
}

person alex    schedule 09.03.2010    source источник


Ответы (4)


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

person dominic    schedule 09.03.2010
comment
I.o.w. Посмотрите на все методы, с помощью которых вы можете вводить данные в TextField и переопределить / переопределить их, чтобы отклонить ввод, который не является целым числом. - person NomeN; 11.03.2010

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

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

  1. получить источник события
  2. определить текущую позицию курсора
  3. if the character at the current position is not valid input, then
    1. remove the bad character
    2. сбросить текст в поле

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

person Kevin Brock    schedule 09.03.2010

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

person camickr    schedule 09.03.2010

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

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);

    }
}
person med    schedule 08.02.2012
comment
нет, KeyListener не приемлемый ответ (и OP использует AWT) - person kleopatra; 08.02.2012