查看完整版本: 關於JTextField能限定打的字數嗎
頁: [1]

a1212xzxz 發表於 2009-11-10 08:31 PM

關於JTextField能限定打的字數嗎

如題!!例如說
一個格子只能打五格字
這樣子可以嗎


   urlPanel.add(new Label("輸入文字但請勿打'*'"));     
        urlPanel.add(new Label("輸入完請儲存"));     
         JTextField1 = new JTextField(10);   //欄位1
         JTextField2 = new JTextField(20);  //欄位2
         JTextField3 = new JTextField(20);  //欄位3
         JTextField4 = new JTextField(20);  //欄位4

           getContentPane().add(mainP, BorderLayout.CENTER);
           urlPanel.add(new Label("軟體廠商(ID)"));
           urlPanel.add(JTextField1);
           urlPanel.add(new Label("軟體名稱(Name)"));
           urlPanel.add(JTextField2);
           urlPanel.add(new Label("日期(Date)"));
           urlPanel.add(JTextField3);
           urlPanel.add(new Label("使用次數(Frequency)"));
           urlPanel.add(JTextField4);
           ...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

cscxxx553 發表於 2009-11-16 04:05 PM

不知道是不是你要的也可能有更新的寫法不過還是可以參考一下

轉自jjcipher

透過 JTextField 本身或者其它 Component 的 ActionListener 來處理後續的動作, 其他的 JComponent 能否 get focus 倒不一定重要. 較好的辦法是在一個 Document 的 insertString() 中設定我們的限制條件, 這個 insertString() 只有在輸入值合乎條件時才會去改寫 Document 的 data, 再用 JTextField.setDocument() 將這個 Document assign 給 JTextField. 下面例子中的 NumericTextLimit 就可以做到在 real time 限制 JTextField 只能接受一定長度的數字.
...
import java.awt.*
import javax.swing.*;
import javax.swing.text.*;

public class XXX extends JApplet {
  .....

  JTextField text = new JTextField(10);
  text.setDocument(new NumbericTextLimit(1));
  ...

  // inner class NumericTextLimit
  class NumericTextLimit extends PlainDocument {
    private int limit;

    NumericTextLimit(int limit) {
      super();
      this.limit = limit;
    }

    public void insertString (int offset, String str, AttributeSet attr)
        throws BadLocationException
    {
      if (str == null) return;

      try {
        Integer.parseInt(str);
      } catch (NumberFormatException nfe) {
        getToolkit().beep();
        return;
      }

      if ((getLength() + str.length()) <= limit) {
        //當輸入值合乎條件時才呼叫 super.insertString() 去改寫 Document 的 data.
        super.insertString(offset, str, attr);
      } else {
        getToolkit().beep();
       return;
      }
    }
  } // end of inner class NumericTextLimit

} // end of class XXX
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]