我有一个Jtextfield,我需要它最多只包含一个字符,因此,如果用户键入一个字符,然后键入另一个字符,则另一个字符将被擦除并键入新字符,它将替换它。任何人都知道如何要做到这一点?
问问题
2432 次
2 回答
4
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class GUITest
{
private JFrame frame;
public void init()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
((JPanel)frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JTextField txt = new JTextField(5);
((AbstractDocument) txt.getDocument()).setDocumentFilter(new OneLetterFilter());
frame.add(txt);
frame.pack();
}
public void showGUI()
{
frame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
GUITest gui = new GUITest();
gui.init();
gui.showGUI();
}
});
}
class OneLetterFilter extends DocumentFilter
{
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
{
String oldText = fb.getDocument().getText(0, fb.getDocument().getLength());
fb.replace(0, oldText.length(), text.substring(text.length() - 1), attr);
}
}
}
于 2013-04-05T15:45:07.800 回答
-2
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {
if(jTextField1.getText().length() >0){
jTextField1.setText("");
}
}
根据我从您的问题中了解到的情况。这应该工作
[我在 NetBeans 上使用 jFrameForm 做过]
于 2013-04-05T15:34:41.740 回答