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/

 

 

原创粉丝点击