作者zxwxz (zxwxz)
看板java
标题Re: [问题] 关於JTextField的问题
时间Sat Jun 24 13:10:57 2006
※ 引述《calais007 (浅水中)》之铭言:
: ※ 引述《zxwxz (zxwxz)》之铭言:
: : 现在正在做gui的介面
: : 由於使用者输入可能出现很多问题
: : 因此想直接把一个JTextField改写成只能接受某些特定文字或数字
: : 但是问题来了就是如果是使用.addKeyListener()
: : 虽然可以抓的到文字部分
: : 但是key的触发并不是文字改变的触发
: : 因此抓到了event却不知道怎样把这个event挡掉
: : 例如想挡掉非数字输入
: : 输入a
: : 可是却变成抓到event VK_a
: : 但是此时text内容还没变动
: : 请问有办法抓到文字内容被变更的Listener吗?
: overwrite processEvent(KeyEvent e)
: 要达到你要的效果如下程式所示
: import javax.swing.*;
: import java.awt.event.*;
: public class myTextField extends JTextField{
: public myTextField(int col){
: super(col);
: }
: protected void processKeyEvent(KeyEvent e) {
: char c = e.getKeyChar();
: //如果你有需要的话可以在这里加你想要的alert
: //if key is NOT between 0 and 9
: //do nothing
: if(c <48 || c>57)
: return;
: else
: super.processKeyEvent(e);
: }
: }
找到了好方法了
getDocument().addDocumentListener
就可以抓到Document被改写的时间点
这样更可以避免被复制贴上破坏原有的格式
又遇到更麻烦的问题
public void insertUpdate(DocumentEvent e){
JOptionPane.showMessageDialog(null, getText());
try{
cnt = Integer.parseInt(getText());
}
catch(NumberFormatException n){
setText(cnt+"");
}
if(cnt < lowbound) setText(lowbound+"");
else if(cnt > upbound) setText(upbound+"");
}
本想说判定完已经改变後的文字叙述
可是却造成IllegalStateException
好像无法在这个触发中再去SETTEXT
不知有何好办法
有什麽办法可以把
javax.swing.text.AbstractDocument.writeLock的设定改掉呢??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.129.28
※ 编辑: zxwxz 来自: 218.165.129.28 (06/24 14:26)
※ 编辑: zxwxz 来自: 218.165.129.28 (06/24 15:43)