当前位置: 首页 > 面试题库 >

JTextField:如何限制字符数?

曹建明
2023-03-14
问题内容

请看下面的代码。

import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;


public class Bean extends JFrame
{
    private JTextField field1, field2, field3, field4;
    private JLabel text;
    private JButton ok, cancel;
    private JPanel centerPanel,southPanel, textPanel;
    private GridLayout grid;
    private FlowLayout flow1, flow2;

    public Bean()
    {
        //Declaring instance Variables

        field1 = new JTextField(10);

        field2 = new JTextField(5);
        field3 = new JTextField(5);
        field4 = new JTextField(5);        
        text = new JLabel("Insert Your Numbers Here");

      AbstractDocument d = (AbstractDocument) field1.getDocument();
      d.setDocumentFilter(new Bean.Field1Listener());


        ok = new JButton("OK");
        cancel = new JButton("Cancel");


        /***********************Creating the main view*************************/
        centerPanel = new JPanel();
        grid = new GridLayout(2,1,1,1);



        //Adding TextFields
        textPanel = new JPanel();
        flow1 = new FlowLayout(FlowLayout.CENTER);
        textPanel.setLayout(flow1);

        textPanel.add(field1);




        //Adding Buttons
        southPanel = new JPanel();
        southPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
        southPanel.add(ok);
        southPanel.add(cancel);


        //Creating Center View
        centerPanel.setLayout(grid);
        centerPanel.add(text);
        centerPanel.add(textPanel);


        //Gathering everything together
        getContentPane().add(centerPanel,"Center");
        getContentPane().add(southPanel,"South");


        this.setSize(500,200);
        this.validate();
        this.setVisible(true);
        this.setLocationRelativeTo(null);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private class Field1Listener extends DocumentFilter
    {

       @Override  
        public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException  
        {
            if(fb.getDocument().getLength()+string.length()>5)
            {
                return;
            }

            fb.insertString(offset, string, attr);

        }


        @Override  
        public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 
        {

            fb.insertString(offset, "", null);
        }



        @Override  
        public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs)throws BadLocationException 
        {



                 if(fb.getDocument().getLength()+text.length()>5)
                 {
                    System.out.println("OK");
                    return;
                }

                fb.insertString(offset, text, attrs);
        }
    }

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

在这里,我试图将字符数限制为5。好,当达到5时,它将不再插入任何字符,但实际情况是,它也不允许删除插入的字符,进行替换或其他操作。如何解决这个问题?


问题答案:

只需更改您当前的删除方法:

 @Override  
 public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 
 {

     fb.insertString(offset, "", null);
 }

为此:

 @Override  
 public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 
 {  
     fb.remove(offset, length);
 }

现在应该可以了。



 类似资料:
  • 问题内容: 如何限制在JTextField中输入的字符数? 假设我要输入最多5个字符。此后,不能输入任何字符。 问题答案: 然后 (谷歌的第一个结果)

  • 问题内容: 我想设置一个最大长度,以使你输入的字符不能超过限制。这是我到目前为止的代码… 有什么简单的方法可以限制字符数? 问题答案: 你可以执行以下操作(从此处获取): 编辑:看看这个以前的SO职位。你可以拦截按键事件,并根据文本字段中的当前字符数添加/忽略它们。

  • 下面是关于如何限制字符输入长度的代码 可以通过

  • 问题内容: 我想创建JTextField,输入字符限于“ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789 +&@#/%?=〜_- |!:,。;”之类的输入字符。所以我尝试覆盖 但这不是我想要的,因为用户无法再按ctrl-c ctrl-v ctrl-x …所以我添加了 到if条件,但现在用户可以粘贴不适当的输入,即’(’

  • 我想把我的标签限制为10个字符,我是一个完全的编程新手,所以这是我到目前为止的第三个月了。。。无论如何,提前谢谢:-)

  • 问题内容: 我希望能够限制文本区域中的字符数。我使用的方法在Google Chrome浏览器中效果很好,但是在Firefox中运行缓慢,在IE中不起作用。 Javascript: HTML: 正文元素底部的Javascript: 问题答案: 我发现了一个很好的解决方案,如果浏览器支持,则使用maxlength属性,并在不支持的浏览器中回退到不引人注意的javascript pollyfill。 H