我自己写的一个只接收整数输入的TextFiled组件(可设置最大值与最小值),共勉!

canyon6 2006-04-25 02:16:58
/**
* JNumTextField.java
*
* Created on 2006年4月23日, 下午7:54
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package org.firebug;

import java.awt.BorderLayout;

import javax.swing.JTextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.Dimension;

/**
* <p>Title: 整数输入框</p>
*
* <p>Description: 该组件继承于JTextField,只能接受整数输入,不能是实数,即最小值为

Integer.MIN_VALUE,最大值为Integer.MAX_VALUE。</p>
* <p>当输入值小于指定的最小值时,当前值取该最小值;当输入值大于指定的最大值时,当前值取该最大

值。</p>
* <p>当输入值为无效的整数格式时,当前值不改变。</p>
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: firebug工作室</p>
*
* <p>author firebug</p>
* <p>version 1.0</p>
*/
public class JNumTextField extends JTextField
{
BorderLayout borderLayout1 = new BorderLayout();

private int minValue=Integer.MIN_VALUE;
private int maxValue=Integer.MAX_VALUE;
private int curValue=0;
Dimension dimension1 = this.getMaximumSize();
/**
*value表示当前值
*最大值默认为Integer.MAX_VALUE
*最小值默认为Integer.MIN_VALUE
*/
public JNumTextField(int value)
{
super(String.valueOf(value));

try
{
jbInit();
this.setCurValue(value);
//this.setText(String.valueOf(value));
}
catch (Exception exception)
{
exception.printStackTrace();
}
}
/**
*当前值默认为0
*最大值默认为Integer.MAX_VALUE
*最小值默认为Integer.MIN_VALUE
*/
public JNumTextField()
{
this(0);
}

private void jbInit() throws Exception
{
setLayout(borderLayout1);
this.addKeyListener(new java.awt.event.KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
jNumTextField_keyTyped(e);
}
public void keyReleased(KeyEvent e)
{
jNumTextField_keyReleased(e);
}
});
this.addFocusListener(new java.awt.event.FocusAdapter()
{
public void focusLost(java.awt.event.FocusEvent evt)
{
jNumTextFieldFocusLost(evt);
}
});

}

private void jNumTextFieldFocusLost(java.awt.event.FocusEvent evt)
{
// TODO 将在此处添加您的处理代码:
try
{
if (Integer.parseInt(this.getText())>maxValue)
{
curValue=maxValue;
}
else
{
if (Integer.parseInt(this.getText())<minValue)
{
curValue=minValue;
}
else
{
curValue=Integer.parseInt(getText());
}
}
}
catch(NumberFormatException e)
{
//do Nothing;
}
finally
{
this.setText(String.valueOf(curValue));
}
}
/**
*返回当前值
*/
public int getCurValue()
{
return curValue;
}
/**
*返回最大值
*/
public int getMaxValue()
{
return maxValue;
}
/**
*返回最小值
*/
public int getMinValue()
{
return minValue;
}
/**
*设置当前值,当value大于最大值或小于最小值时,抛出NumberOverFlowException异常
*/
public void setCurValue(int value)throws NumberOverFlowException
{
if (value>maxValue)
{
throw new NumberOverFlowException("输入值不能超过最大值");
}
else
{
if (value<minValue)
{
throw new NumberOverFlowException("输入值不能小于最小值");
}
else
{
curValue=value;
setText(String.valueOf(curValue));
}
}
}
/**
*设置最大值,当value小于最小值时,抛出NumberOverFlowException异常
*/
public void setMaxValue(int value)throws NumberOverFlowException
{
if (value<minValue)
{
throw new NumberOverFlowException("最大值不能小于最小值");
}
else
{
this.maxValue=value;
if (this.getCurValue()>value)
{
this.setCurValue(value);
setText(String.valueOf(curValue));
}
}
}
/**
*设置最小值,当value大于最大值时,抛出NumberOverFlowException异常
*/
public void setMinValue(int value)throws NumberOverFlowException
{
if (value>maxValue)
{
throw new NumberOverFlowException("最小值不能大于最大值");
}
else
{
this.minValue=value;
if (this.getCurValue()<value)
{
this.setCurValue(value);
setText(String.valueOf(curValue));
}
}
}

private void jNumTextField_keyTyped(KeyEvent evt)
{
// TODO 将在此处添加您的处理代码:
if (!Character.isDigit(evt.getKeyChar()))
{
if (evt.getKeyChar()!='-')
{
evt.setKeyChar('\u0000');
}
}


}
private void jNumTextField_keyReleased(KeyEvent evt)
{

}
}

class NumberOverFlowException extends Exception
{
public NumberOverFlowException(String s)
{
super(s);
}

}
...全文
93 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Voxer 2006-04-25
  • 打赏
  • 举报
回复
用PlainDocument是不是可以更灵活些啊

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧