Swing校验
来源:互联网 发布:sigmasoft软件 编辑:程序博客网 时间:2024/05/22 05:33
校验组件,是应用程序中常用的组件之一,一般的swing应用也好,web应用也好,一种良好的校验机制可以使得用户感觉更舒服一些,下面的代码用于实现一个简单的Swing普通文本区域校验,这个文本区域用于填写一些数字类型的数据:
1。先编写一个Util 类,这个Util类主要用于将窗口居中,核心代码如下:
public static void center( Window window ) {
//用于读取屏幕大小
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
//计算一下新的窗口应该存放的位置
int w = window.getSize().width;
int h = window.getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;
// 移动窗口到中间
window.setLocation(x, y);
{style} }
这个函数位于Util.java 文件中,实际上这个函数你也可以不放在这个类里面,这里为了让校验那边代码看起来清楚一些。
2。编写主要代码:
public class FieldValidation {
private final static DateFormat dateFormat =
new SimpleDateFormat( "MM/dd/yyyy" );
private final Font font = new Font( null,
Font.BOLD | Font.ITALIC,
12 );
private final JFrame frame = new JFrame();
private final JTextField name = new JTextField( 25 );
private final JTextField age = new JTextField( 3 );
private final JTextField birthday = new JTextField( 10 );
private final JTextField status = new JTextField( 30 );
public FieldValidation(){
frame.setTitle( "Field Validation Example" );
// assign a verifier to each input field
age.setInputVerifier( new AgeVerifier() );
birthday.setInputVerifier( new BirthdayVerifier() );
name.setInputVerifier( new BlankFieldVerifier() );
buildGUI();
}
/*
* 生成一个GUI
*/
private void buildGUI(){
JPanel mainPanel = new JPanel();
mainPanel.setLayout( new BoxLayout( mainPanel, BoxLayout.Y_AXIS ) );
mainPanel.setBorder( BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder( 5,5,5,5 ),
mainPanel.getBorder() ) );
mainPanel.add( buildInputPanel() );
mainPanel.add( buildStatusPanel() );
frame.getContentPane().add( mainPanel, BorderLayout.CENTER );
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent wevt) {
System.exit(0);
}
});
frame.setResizable( false );
frame.pack();
Utils.center( frame );
frame.setVisible( true );
}
/*
* 生成一个Panel.
*/
private JPanel buildInputPanel(){
JPanel panel = new JPanel();
Border border = BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
"Input",
TitledBorder.LEADING,
TitledBorder.TOP,
font,
Color.GRAY );
panel.setLayout( new BoxLayout( panel,
BoxLayout.Y_AXIS ) );
panel.setBorder( border );
panel.add( buildField( name, "Name:" ) );
panel.add( buildField( age, "Age:" ) );
panel.add( buildField( birthday, "Birthday:" ) );
return panel;
}
/*
* 生成一个输入区域并存放在Panel中.
*/
private JPanel buildField( JComponent comp, String label ){
comp.setMinimumSize( comp.getPreferredSize() );
comp.setMaximumSize( comp.getPreferredSize() );
JPanel panel = new JPanel();
panel.setBorder( BorderFactory.createEmptyBorder( 2,2,2,2 ) );
panel.setLayout( new BoxLayout( panel,
BoxLayout.X_AXIS ) );
Box leftBox = new Box( BoxLayout.X_AXIS );
leftBox.setPreferredSize( new Dimension( 60, 20 ) );
leftBox.add( new JLabel( label ) );
Box rightBox = new Box( BoxLayout.X_AXIS );
rightBox.add( comp );
panel.add( leftBox );
panel.add( rightBox );
panel.add( Box.createHorizontalGlue() );
return panel;
}
/*
* 生成一个状态panel.
*/
private JPanel buildStatusPanel(){
JPanel panel = new JPanel();
Border border = BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
"Status",
TitledBorder.LEADING,
TitledBorder.TOP,
font,
Color.GRAY );
panel.setBorder( border );
status.setEditable( false );
status.setForeground( Color.BLUE );
status.setText( "Ready" );
panel.add( status );
return panel;
}
/*
* 这是一个内部类,用于检查确保输入框不为空
*
* shouldYieldFocus() 中方法在校验失败的时候将会返回一个信号。
*/
private class BlankFieldVerifier extends InputVerifier {
public boolean verify(JComponent comp) {
JTextField fld = (JTextField) comp;
String content = fld.getText();
boolean isValid = true;
if (content.length() == 0) {
status.setText("Field cannot be blank.");
isValid = false;
}
return isValid;
}
public boolean shouldYieldFocus(JComponent input) {
boolean valid = super.shouldYieldFocus(input);
if (!valid) {
frame.getToolkit().beep();
}
return valid;
}
}
/*
* 检查age这个输入框是否非空,并且填入的是一个整数.
*/
private class AgeVerifier extends BlankFieldVerifier {
public boolean verify(JComponent comp) {
JTextField fld = (JTextField) comp;
String content = fld.getText();
boolean isValid = true;
try {
Integer.parseInt(content);
} catch (NumberFormatException nfe) {
fld.setText("");
status.setText("Age must be a number.");
isValid = false;
}
if (isValid) {
status.setText("Age is valid.");
}
return isValid;
}
}
/*
* 检查birthday输入框确保它是非空,并且包含一个有效日期类型
*/
private class BirthdayVerifier extends BlankFieldVerifier {
public boolean verify(JComponent comp) {
JTextField fld = (JTextField) comp;
String content = fld.getText();
boolean isValid = true;
try {
dateFormat.parse(content);
} catch (ParseException e) {
fld.setText("");
status.setText("Birthday must be mm/dd/yyyy.");
isValid = false;
}
if (isValid) {
status.setText("Birthday is valid.");
}
return isValid;
}
}
/**
* 这是这个小应用的主函数
*/
public static void main(String[] args){
new FieldValidation();
}
}
来源:http://www.javabiz.cn/bin/view/javase/