textbox类只接受Java中的整数

时间:2010-03-09 02:28:37

标签: java textbox integer

我只想做一个textbox类只接受整数..

我做了一些事情,但我认为这还不够。

有人可以帮帮我吗? 感谢...

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 个答案:

答案 0 :(得分:2)

我认为你错过了这里的一点提示,你的代码我还可以打电话     textfield.setText(“我不是数字”);

答案 1 :(得分:1)

由于您必须使用TextArea,因此TextListener可能会取得一些成功。添加一个监听器,将输入的字符限制为仅数字。

在伪代码中,事件方法可以这样做:

  1. 获取活动来源
  2. 确定当前光标位置
  3. 如果当前位置的字符无效输入,则
    1. 删除不良角色
    2. 重置字段中的文字
  4. 使用JTextField更容易,因为您可以替换文档模型或只使用JFormattedTextField

答案 2 :(得分:0)

为什么使用TextField?为什么不学习Swing而不是AWT,那么你可以使用JTextField。实际上,您可以使用支持此要求的JFormattedTextField。阅读API并按照示例教程的链接进行操作。

答案 3 :(得分:-1)

当用户尝试输入非数字数据时,它会拒绝删除不是整数的输入。

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

    }
}