gpt4 book ai didi

java - JTextField:如何限制字符数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:51:19 28 4
gpt4 key购买 nike

请看下面的代码。

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

它现在应该可以工作了。

关于java - JTextField:如何限制字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586395/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com