回 帖 发 新 帖 刷新版面

主题:swing组键问题

请问要如何才能限定swing组键当中的jTextField输入的字符数啊!也就是说只允许输入的字符数为10个时,输入第十一个就不显示出来了!但是可以做删除字符的行为

回复列表 (共7个回复)

沙发


JTextField jtf=new JTextField(10);

板凳

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class Checkboxx extends JFrame {

    private JTextField aJTextField;

    public Checkboxx() {
        createUserInterface();
    }

    private void createUserInterface() {
        Container contentPane = getContentPane();

        contentPane.setLayout(null);

        JTextComponent aJTextField = new JTextField();
        aJTextField.setBounds(240, 86, 165, 42);
        aJTextField.setDocument(new FixedSizePlainDocument(10));

        contentPane.add(aJTextField);
        setTitle("check"); // set title bar text
        setSize(575, 220); // set window size
        setVisible(true);
        // display window
    }

    public static void main(String args[]) {
     new Checkboxx();
    }

    class FixedSizePlainDocument extends PlainDocument {
        int maxSize;

        public FixedSizePlainDocument(int limit) {
            maxSize = limit;
        }

        public void insertString(int offs, String str, AttributeSet a)
                throws BadLocationException {
            if ((getLength() + str.length()) <= maxSize) {
                super.insertString(offs, str, a);
            } else {
                throw new BadLocationException(
                        "Insertion exceeds max size of document", offs);
            }
        }
    }

}

3 楼

或者
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class Checkboxx extends JFrame {

    private JTextField aJTextField;

    public Checkboxx() {
        createUserInterface();
    }

    private void createUserInterface() {
        Container contentPane = getContentPane();

        contentPane.setLayout(null);

        JTextComponent aJTextField = new JTextField();
        aJTextField.setBounds(240, 86, 165, 42);
        aJTextField.setDocument(new TextLenghtLimitedDocument(10));

        contentPane.add(aJTextField);
        setTitle("check"); // set title bar text
        setSize(575, 220); // set window size
        setVisible(true);
        // display window
    }

    public static void main(String args[]) {
     new Checkboxx();
    }

    public class TextLenghtLimitedDocument
    extends javax.swing.text.PlainDocument {
        int maxSize;

        TextLenghtLimitedDocument(int limitLength) {
            maxSize = limitLength;
        }

        public void insertString(int offs, String str, AttributeSet a)
                throws BadLocationException {
            if ((getLength() + str.length()) <= maxSize) {
                super.insertString(offs, str, a);
            } else {
                throw new BadLocationException(
                        "Insertion exceeds max size of document", offs);
            }
        }
    }

}

4 楼

michyifeng说的不能实现,但能回个帖~!再怎么我也给了10分!zhangheng77方法有些复杂了!有简单点的方法没啊!大哥

5 楼

JTextField jtf=new JTextField();
if(jtf.length()<=10)
{
   //执行语句
}

6 楼

有个......NumberFormat...类可以实现《java核心技术》中有这个

7 楼

有一个方便的方法
  监听JTextField的键盘事件.
  JTextField jt = new JTextField();  
  jt.addKeyListener(new KeyListener(){
     public void keyTyped(KeyEvent e){
        if(jt.getText().length()>10){
            e.consume();
        }
     }
   }
还有一种可能性就是用户可能采用复制,粘贴方式,所以你还可以添加监听,或者启动一个线程,监听用户输入,不过这样比较麻烦就是了

我来回复

您尚未登录,请登录后再回复。点此登录或注册