1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
/**
* Created by IntelliJ IDEA.
* User: bebe
* Date: 13-Jun-2006
* Time: 21:08:56
* To change this template use File | Settings | File Templates.
*/
public class TextLimiter /* extends PlainDocument */ extends DocumentFilter {
private int max;
public TextLimiter(int max) {
// super();
this.max = max;
}
// public void insertString(int offset, String str, AttributeSet attrs) throws BadLocationException {
public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException {
/*
if (str != null && getLength() + str.length() > max) {
Toolkit.getDefaultToolkit().beep();
} else {
super.insertString(offset, str, attrs);
}
*/
replace(fb, offset, 0, str, attr);
}
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
int newLength = fb.getDocument().getLength() - length + str.length();
if (newLength <= max) {
fb.replace(offset, length, str, attrs);
} else {
Toolkit.getDefaultToolkit().beep();
}
/*
if (str != null && getLength() + str.length() - length > max) {
Toolkit.getDefaultToolkit().beep();
} else {
super.replace(offset, length, str, attrs);
}
*/
}
public static void main(String[] args) {
JFrame myFrame = new JFrame("");
myFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextField myTextField = new JTextField();
myTextField.setPreferredSize(new Dimension(150, 20));
AbstractDocument doc = (AbstractDocument) myTextField.getDocument();
doc.setDocumentFilter(new TextLimiter(10));
JButton myButton = new JButton("Action!");
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
myTextField.getDocument().insertString(0, "helooo", null);
} catch (BadLocationException e1) {
e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
});
myFrame.add(myButton);
myFrame.add(myTextField);
myFrame.pack();
myFrame.setVisible(true);
}
} |
Partager