2015-02-07 30 views
0

我想要一個JTextField其中只能輸入數字(整數和小數),而且只能輸入12345和0以下的數字。我該怎麼做?我有什麼權利現在:JTextField上的最大值

JTextField tf = new JTextField(); 

    final PlainDocument doc = new PlainDocument(); 
    doc.setDocumentFilter(new DocumentFilter() { 

     @Override 
     public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
      String s = doc.getText(0, offset) + string + doc.getText(offset, doc.getLength() - offset); 
      try { 
       if (Double.parseDouble(s) > 12345) { 
        fb.replace(0, 5, "12345", attr); 
       } 
      } catch (NumberFormatException e) { 
       fb.insertString(offset, string.replaceAll("\\D++", ""), attr); 
      } 
     } 

     @Override 
     public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
      String s = (doc.getText(0, offset) + text + doc.getText(offset, doc.getLength() - offset)).trim(); 
      try { 
       if (Double.parseDouble(s) > 12345) { 
        fb.replace(0, 5, "12345", attrs); 
       } 
      } catch (NumberFormatException e) { 
       fb.insertString(offset, text.replaceAll("\\D++", ""), attrs); 
      } 
     } 

    }); 

    tf.setDocument(doc); 

(這是加入到JFrame窗口在BorderLayout.CENTER,有沒有別的吧)

但它不工作(我不能鍵入任何東西)。我究竟做錯了什麼?

注:我寧願使用沿着上述辦法的東西線(使用Document S),而不是有可能的話訴諸類似JFomattedTextField

+0

請考慮將「JSpinner」與['SpinnerNumberModel'](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerNumberModel.html)一起使用。 – 2015-02-07 23:58:11

回答

3

但它不起作用(我什麼都不能輸入)。

if (Double.parseDouble(s) > 12345) { 
    fb.replace(0, 5, "12345", attrs); 
} 

如果該值> 12345更新與硬編碼的值的文件。

但是,如果值是< 12345你什麼都不做。您需要通過調用super.replace(...)super.insertString()在文檔中插入輸入的字符。

相關問題