J__666
سه شنبه 05 آذر 1387, 21:36 عصر
چطور می تونم یه textfield رو محدود به اعداد بکنم ؟؟
یعنی کاربر هر کاراکتری به غیر عدد وارد کرد هیچ تغییر تو textfiield اعمال نشه !!
و برای textfield هم یه تعداد محدود کاراکتر بشه وارد کرد !!
البته من این کار رو با
abstract document کردم ولی به نظرم منطقی نمی یاد!!
باید یه راه ساده تری هم باشه !!
((AbstractDocument)(JTNUM.getDocument( ))).setDocumentFilter(new DocumentFilter(){
public void insertString(FilterBypass FILTER, int offset, String string, AttributeSet attr) throws BadLocationException {
FILTER.insertString(offset,string, attr);
}
public void replace(FilterBypass FILTER, int offset, int length, String string,AttributeSet attr) throws BadLocationException{
try{
if(offset > 9) throw new Exception();
FILTER.replace( offset, length,String.valueOf(Integer.parseInt(string)) , attr );
}catch(java.lang.NumberFormatException E){
JOptionPane.showMessageDialog(null,"-","-",JOptionPane.ERROR_MESSAGE);
}
catch(Exception E){
JOptionPane.showMessageDialog(null,"-","--",JOptionPane.ERROR_MESSAGE);
}
}
});
همونطور که می بینید یه شرط نه رقمی گذاشتم !!
اگر تعداد کاراکتر هایی که کاربر وارد می کنه بیشتر از 9 بشه یه استثنا راه می افته و بلافاصله گرفتارش می کنم !!
و اگر کاربر حرف وارد کنه تو
parseInt یه استثنا <فرمت> راه می افته که اونم گرفتار می کنم !!
یعنی کاربر هر کاراکتری به غیر عدد وارد کرد هیچ تغییر تو textfiield اعمال نشه !!
و برای textfield هم یه تعداد محدود کاراکتر بشه وارد کرد !!
البته من این کار رو با
abstract document کردم ولی به نظرم منطقی نمی یاد!!
باید یه راه ساده تری هم باشه !!
((AbstractDocument)(JTNUM.getDocument( ))).setDocumentFilter(new DocumentFilter(){
public void insertString(FilterBypass FILTER, int offset, String string, AttributeSet attr) throws BadLocationException {
FILTER.insertString(offset,string, attr);
}
public void replace(FilterBypass FILTER, int offset, int length, String string,AttributeSet attr) throws BadLocationException{
try{
if(offset > 9) throw new Exception();
FILTER.replace( offset, length,String.valueOf(Integer.parseInt(string)) , attr );
}catch(java.lang.NumberFormatException E){
JOptionPane.showMessageDialog(null,"-","-",JOptionPane.ERROR_MESSAGE);
}
catch(Exception E){
JOptionPane.showMessageDialog(null,"-","--",JOptionPane.ERROR_MESSAGE);
}
}
});
همونطور که می بینید یه شرط نه رقمی گذاشتم !!
اگر تعداد کاراکتر هایی که کاربر وارد می کنه بیشتر از 9 بشه یه استثنا راه می افته و بلافاصله گرفتارش می کنم !!
و اگر کاربر حرف وارد کنه تو
parseInt یه استثنا <فرمت> راه می افته که اونم گرفتار می کنم !!