JAVA文本框格式化

 这是java核心技术上的一个例子,implements   DocumentListener,对输入字符进行监听和判断就可以了
/**
  *   @version   1.20   2   Jul   1998
  *   @author   Cay   Horstmann
  */

import   java.awt.*;
import   java.awt.event.*;
import   javax.swing.*;
import   javax.swing.event.*;
import   javax.swing.text.*;

class   ValidationTestFrame   extends   JFrame
      implements   DocumentListener
{     public   ValidationTestFrame()
      {     setTitle( "ValidationTest ");
            setSize(300,   200);
            addWindowListener(new   WindowAdapter()
            {     public   void   windowClosing(WindowEvent   e)
                  {     System.exit(0);
                  }
            }   );

            Container   contentPane   =   getContentPane();

            JPanel   p   =   new   JPanel();
            hourField   =   new   IntTextField(12,   3);
            p.add(hourField);
            hourField.getDocument().addDocumentListener(this);
           
            minuteField   =   new   IntTextField(0,   3);
            p.add(minuteField);
            minuteField.getDocument().addDocumentListener(this);
   
            contentPane.add(p,   "South ");
            clock   =   new   ClockPanel();
            contentPane.add(clock,   "Center ");
      }
     
      public   void   insertUpdate(DocumentEvent   e)
      {     setClock();
      }
      public   void   removeUpdate(DocumentEvent   e)
      {     setClock();
      }
      public   void   changedUpdate(DocumentEvent   e)
      {    
      }
       
      public   void   setClock()
      {     if   (hourField.isValid()   &&   minuteField.isValid())
            {     int   hours   =   hourField.getValue();
                  int   minutes   =   minuteField.getValue();
                  clock.setTime(hours,   minutes);
            }
      }
           
      private   IntTextField   hourField;
      private   IntTextField   minuteField;
      private   ClockPanel   clock;
}

class   ClockPanel   extends   JPanel
{     public   void   paintComponent(Graphics   g)
      {     super.paintComponent(g);  
            g.drawOval(0,   0,   100,   100);
            double   hourAngle  
                  =   2   *   Math.PI   *   (minutes   -   3   *   60)   /   (12   *   60);
            double   minuteAngle  
                  =   2   *   Math.PI   *   (minutes   -   15)   /   60;
            g.drawLine(50,   50,  
                  50   +   (int)(30   *   Math.cos(hourAngle)),  
                  50   +   (int)(30   *   Math.sin(hourAngle)));
            g.drawLine(50,   50,  
                  50   +   (int)(45   *   Math.cos(minuteAngle)),  
                  50   +   (int)(45   *   Math.sin(minuteAngle)));
      }
     
      public   void   setTime(int   h,   int   m)
      {     minutes   =   h   *   60   +   m;
            repaint();
      }
     
      public   void   tick()
      {     minutes++;    
            repaint();
      }
     
      private   int   minutes   =   0;
}

public   class   ValidationTest
{     public   static   void   main(String[]   args)
      {     JFrame   frame   =   new   ValidationTestFrame();
            frame.show();
      }
}

class   IntTextDocument   extends   PlainDocument
{     public   void   insertString(int   offs,   String   str,  
            AttributeSet   a)  
            throws   BadLocationException  
      {     if   (str   ==   null)   return;
            String   oldString   =   getText(0,   getLength());
            String   newString   =   oldString.substring(0,   offs)
                  +   str   +   oldString.substring(offs);
            try
            {     Integer.parseInt(newString   +   "0 ");
                  super.insertString(offs,   str,   a);
            }
            catch(NumberFormatException   e)
            {    
            }
      }
}

class   IntTextField   extends   JTextField  
{     public   IntTextField(int   defval,   int   size)
      {     super( " "   +   defval,   size);
      }

      protected   Document   createDefaultModel()  
      {     return   new   IntTextDocument();
      }

      public   boolean   isValid()
      {     try
            {     Integer.parseInt(getText());
                  return   true;
            }
            catch(NumberFormatException   e)
            {     return   false;  
            }
      }

      public   int   getValue()
      {     try
            {     return   Integer.parseInt(getText());
            }
            catch(NumberFormatException   e)
            {     return   0;  
            }
      }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值