我試圖限制多個jtextfield上的字符輸入。這兩個字段有不同的字符限制,同時他們不能接受空白作爲他們的第一個字符...例如第一個字段只有5個字符的限制,然後第二個字段有10char限制..我被困在這個問題上這裏是我使用的代碼:在jtextfield或區域限制字符輸入
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
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 Restriction {
public Restriction() {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Restriction();
}
});
}
private void initComponents() {
GridBagConstraints Cons = new GridBagConstraints();
JFrame frame = new JFrame();
JPanel panel = new JPanel(new GridBagLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField jtf = new JTextField(20);
JTextField jtf2 = new JTextField(20);
//add filter to document
((AbstractDocument) jtf.getDocument()).setDocumentFilter(new MyDocumentFilter());
MyDocumentFilter.charLimit(5);
((AbstractDocument) jtf2.getDocument()).setDocumentFilter(new MyDocumentFilter());
MyDocumentFilter.charLimit(10);
Cons.gridy = 0;
panel.add(jtf, Cons);
Cons.gridy = 1;
panel.add(jtf2,Cons);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
class MyDocumentFilter extends DocumentFilter {
static int Limit;
public static void charLimit(int Limitation){
Limit = Limitation;
}
@Override
public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException {
//we want standard behavior if we are not placing space at start of JTextField
//or if we are placing text at start of JTextField but first character is not whitespace
if (i!=0 && i< Limit || (i==0 && !Character.isWhitespace(string.charAt(0)))){
super.replace(fb, i, i1, string, as);
}else{
System.out.println("no spaces allowed");
}
}
@Override
public void remove(FilterBypass fb, int i, int i1) throws BadLocationException {
super.remove(fb, i, i1);
}
@Override
public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException {
super.insertString(fb, i, string, as);
}
}
感謝您的答覆..但我的問題仍然存在,我試圖限制2 JTextField中具有不同的字符限制,但同時它不接受空格作爲它的第一個字符 – Criz
看我的例子,你用'TextDocument '剛開始時只提供關於空白空間的5和10 –
,只需在'validateLength'方法中改變我的類。非常簡單 –