java小数点输入,java JTextField 只能输入数字(控制小数点位数)

package util;

import javax.swing.text.PlainDocument;

import javax.swing.text.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class JTNumEdit extends JTextField

{

private boolean initialized = true;

// Assign defalut value

private int gDecimalLenght = -1;//精确控制小数点输入位数

private int nMaxStringLen = 14;

private String Formatter = "#,##0.00";

private boolean zero2100 = false;//只能输入0~100之间的值

private boolean noFS = false;

public JTNumEdit()

{

super();

init();

}

// The maximal string length of TextFiled is given by caller

public JTNumEdit(int MaxStringLen)

{

super();

init();

this.nMaxStringLen = MaxStringLen;

}

// The maximal string length of TextFiled and decimal formatter is given by caller

public JTNumEdit(int MaxStringLen, String Formatter)

{

super();

init();

this.nMaxStringLen = MaxStringLen;

this.Formatter = Formatter;

}

//精确控制小数点输入位数

public JTNumEdit(int MaxStringLen,int decimalLenght, String Formatter)

{

super();

init();

this.nMaxStringLen = MaxStringLen;

this.Formatter = Formatter;

this.gDecimalLenght = decimalLenght;

}

//精确控制小数点输入位数并且只能输入0~100之间的值

public JTNumEdit(int MaxStringLen,int decimalLenght, String Formatter,boolean zero2100)

{

super();

init();

this.nMaxStringLen = MaxStringLen;

this.Formatter = Formatter;

this.gDecimalLenght = decimalLenght;

this.zero2100 = zero2100;

}

public JTNumEdit(int MaxStringLen, String Formatter,boolean noFS)

{

super();

init();

this.nMaxStringLen = MaxStringLen;

this.Formatter = Formatter;

this.noFS = noFS;

}

// initialize

private void init()

{

//    this.setText(this.getText()) ;

this.setHorizontalAlignment(SwingConstants.RIGHT);

// Add focust lost listener

this.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusLost(FocusEvent e)

{

NumEdit_FocusLost(e);

}

});

this.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusGained(FocusEvent e)

{

NumEdit_FocusGained(e);

}

});

}

// After the focus is lost, the string is formatted

void NumEdit_FocusLost(FocusEvent e)

{

if (!this.getText().trim().equals(""))

setValueToTextField(getValueFromTextField());

}

// After the focus is gained, the string is selected

void NumEdit_FocusGained(FocusEvent e)

{

this.selectAll();

}

// override the setText function of TextField

public void setText(String text)

{

setValueToTextField(Convert(text));

}

// Get a double value from TextField

public double getValueFromTextField()

{

return Convert(this.getText());

}

// Put a double value to TextField

public void setValueToTextField(double d)

{

String ss = this.getText();

String tt = FormattedText(d);

if (!ss.equals(tt))

super.setText(tt);

System.out.println();

}

// Put a string value to TextField

public void setValueToTextField(String s)

{

String ss = this.getText();

String tt = FormattedText(Convert(s));

if (!ss.equals(tt))

this.setText(tt);

}

// Format the string according to decimal formatter

public String FormattedText(double Value)

{

String ValueText=null;

java.text.DecimalFormat dfStandard=new java.text.DecimalFormat(Formatter);

ValueText=dfStandard.format(Value);

return ValueText;

}

// Convert a string to double

public static double Convert(String TextString)

{

double d = 0;

TextString = TextString.replaceAll(",","");

String TempString = "";

TempString = TextString.replaceAll("-","");

if (!TempString.trim().equals(""))

try{

d = Double.parseDouble(TextString);

}catch(Exception ex){

d = 0;

}

return d;

}

// Add document

protected Document createDefaultModel()

{

return new NumCheck();

}

public void setDocument(Document d)

{

if (!initialized || d instanceof NumCheck)  // allow calls during initialization of base class

super.setDocument(d);

else

throw new UnsupportedOperationException();

}

// Check the number in entering the char

private class NumCheck extends PlainDocument

{

public void insertString(int offs,String str,AttributeSet a)

throws BadLocationException

{

//"."=46; ","=44; "-"=45; "0"=48;

if(getLength()>nMaxStringLen-1)

{

return;

}

if (str.equals("")||str==null)

{

super.insertString(offs,str,a);

}

else

{

if (offs==0)

{

if (noFS){

if (((int) str.charAt(0) == 45) && ((int) str.charAt(0) != 46) &&

((int) str.charAt(0) < 48 || (int) str.charAt(0) > 57)) {

return;

}

}else{

if (((int) str.charAt(0) != 45) && ((int) str.charAt(0) != 46) &&

((int) str.charAt(0) < 48 || (int) str.charAt(0) > 57)) {

return;

}

}

if (str.length()>1)

{

for (int i=1; i

{

if (((int)str.charAt(i)<48||(int)str.charAt(i)>57)&&

((int)str.charAt(i)!=44)&&((int)str.charAt(i)!=46))

{

return;

}

}

}

}

else

{

if (offs==1)

{

for (int i=0; i

{

if ((((int)getText(0,1).charAt(0))<48 || ((int)getText(0,1).charAt(0))>57) &&

(((int)str.charAt(i)<48 || (int)str.charAt(i)>57) &&

((int)str.charAt(i)!=44)))

{

return;

}

}

}

for (int i=0; i

{

if (((int)str.charAt(i)<48||(int)str.charAt(i)>57)&&

((int)str.charAt(i)!=44)&&((int)str.charAt(i)!=46))

{

return;

}

if (((int)str.charAt(i)==46))

{

String strOld=getText(0,getLength());

for (int j=0; j

{

if ((int)strOld.charAt(j)==46)

{

return;

}

}

}

}

}

for (int i=0; i

{

if (((int)str.charAt(i)==46))

{

String strOld=getText(0,getLength());

for (int j=0; j

{

if ((int)strOld.charAt(j)==46)

{

return;

}

}

}

if (((int)str.charAt(i)==45))

{

String strOld=getText(0,getLength());

for (int j=0; j

{

if ((int)strOld.charAt(j)==45)

{

return;

}

}

}

}

int iFlag=str.lastIndexOf(".");

if (iFlag>=0)

{

if ((str.length()-iFlag)>10)

{

str=str.substring(0,iFlag+11);

}

}

String oldString=getText(0,getLength());

String newString=oldString.substring(0,offs)+str+oldString.substring(offs);

iFlag=newString.lastIndexOf(".");

if (iFlag>=0)

{

if ((getLength()-iFlag)>10)

{

return;

}

}

if(gDecimalLenght>-1){//精确控制小数点输入位数

int decimalPosition = newString.lastIndexOf(".");

if (decimalPosition > -1) {

if ((newString.length() - (decimalPosition+1)) > gDecimalLenght)

return;

}

}

if(zero2100){//只能输入0~100之间的值

if(str.equals("-")) return;

if (newString.equals("")) newString = "0";

newString = newString.replaceAll(",","");

double value = 0;

if(!newString.equals("."))

value = new Double(Double.parseDouble(newString)).doubleValue();

if(value<0||value>=100)

return;

}

super.insertString(offs,str,a);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值