⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inttextbean.java

📁 corejava的源程序内有好多的源代码
💻 JAVA
字号:
/**
   @version 1.30 2001-08-20
   @author Cay Horstmann
*/

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

/**
   A bean for editing integer values
*/
public class IntTextBean extends JTextField 
{ 
   public IntTextBean()
   {  
      super("0", TEXTSIZE);
      setInputVerifier(new IntTextFieldVerifier());
      addActionListener(new
         ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               editComplete();
            }
         });
      addFocusListener(new 
         FocusListener()
         {  
            public void focusGained(FocusEvent event)
            {  
               if (!event.isTemporary())
                  lastValue = getValue();
               
            }
            public void focusLost(FocusEvent event)
            {  
               if (!event.isTemporary())
                  editComplete();               
            }
         });
   }

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

   /**
      This method is called when the text field loses
      focus or the user hits Enter.
   */
   public void editComplete()
   {  
      Integer oldValue = new Integer(lastValue);
      Integer newValue = new Integer(getValue());
      try
      {  
         fireVetoableChange("value", oldValue, newValue);
         // survived, therefore no veto
         firePropertyChange("value", oldValue, newValue);
      }
      catch(PropertyVetoException e)
      {  
         // someone didn't like it
         JOptionPane.showMessageDialog(this, "" + e,
            "Input Error", JOptionPane.WARNING_MESSAGE);
         setText("" + lastValue);
         requestFocus();
            // doesn't work in all JDK versions--see bug #4128659
      }
   }

   /**
      Checks if the contents of this field is a valid integer.
      @return true of the field contents is valid
   */
   public boolean isValid()
   {
      return IntTextDocument.isValid(getText());
   }

   /**
      Gets the numeric value of the field contents.
      @param the number that the user typed into the field, or
      0 if the field contents is not valid.
   */
   public int getValue()
   {  
      try
      {  
         return Integer.parseInt(getText());
      }
      catch(NumberFormatException e)
      {
         return 0;  
      }
   }

   /**
      Sets the constrained value property.
      @param v the new value
   */
   public void setValue(int v) throws PropertyVetoException
   {  
      Integer oldValue = new Integer(getValue());
      Integer newValue = new Integer(v);
      fireVetoableChange("value", oldValue, newValue);
      // survived, therefore no veto
      setText("" + v);
      firePropertyChange("value", oldValue, newValue);
   }

   public Dimension getPreferredSize()
   {  
      return new Dimension(XPREFSIZE, YPREFSIZE);
   }

   private int lastValue;
   private static final int XPREFSIZE = 50;
   private static final int YPREFSIZE = 20;
   private static final int TEXTSIZE = 10;
}

/**
   A document that can only hold valid integers or their 
   substrings
*/
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);

      if (canBecomeValid(newString))
         super.insertString(offs, str, a);
   }

   /**
      A helper function that tests whether a string is a valid
      integer
      @param s a string
      @return true if s is a valid integer
   */
   public static boolean isValid(String s)
   {
      try
      {  
         Integer.parseInt(s);
         return true;
      }
      catch(NumberFormatException e)
      {  
         return false; 
      }
   }

   /**
      A helper function that tests whether a string is a 
      substring of a valid integer
      @param s a string
      @return true if s can be extended to a valid integer
   */
   public static boolean canBecomeValid(String s)
   {
      return s.equals("") || s.equals("-") || isValid(s);
   }
}

/**
   A verifier that checks if the contents of a text component
   is a valid integer.
*/
class IntTextFieldVerifier extends InputVerifier
{
   public boolean verify(JComponent component)
   {
      String text = ((JTextComponent)component).getText();
      return IntTextDocument.isValid(text);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -