如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

          CowNew開源團(tuán)隊(duì)

          http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

           

          首先演示一個(gè)NumberFormatter的例子,在這個(gè)例子中要求用戶輸入一個(gè)數(shù)字,單擊按鈕后將用戶輸入的數(shù)字乘2以后重新賦值給輸入框。用戶輸入的數(shù)字必須大于0,小于100。

          package com.cownew.Char19;

          import java.awt.Font;

          import java.awt.Rectangle;

          import java.math.BigDecimal;

          import javax.swing.JButton;

          import javax.swing.JDialog;

          import javax.swing.JFormattedTextField;

          import javax.swing.JOptionPane;

          import javax.swing.JPanel;

          import javax.swing.text.NumberFormatter;

          import javax.swing.JTextField;

          public class NumberFormaterDialog1 extends JDialog

          {

          private JPanel jContentPane = null;

          private JFormattedTextField numTxtField = null;

          private JButton jButton = null;

          private JTextField jTextField = null;

          private JFormattedTextField getNumTxtField()

          {

          if (numTxtField == null)

          {

          NumberFormatter numFormater = new NumberFormatter();

          numFormater.setMaximum(new BigDecimal(100));

          numFormater.setMinimum(new BigDecimal(0));

          numTxtField = new JFormattedTextField(numFormater);

          numTxtField.setBounds(new Rectangle(56, 38, 154, 24));

          }

          return numTxtField;

          }

          private JButton getJButton()

          {

          if (jButton == null)

          {

          jButton = new JButton();

          jButton.setBounds(new Rectangle(78, 80, 81, 36));

          jButton.setFont(new Font("Dialog", Font.PLAIN, 18));

          jButton.setText("計(jì)算");

          jButton.addActionListener(new java.awt.event.ActionListener() {

          public void actionPerformed(java.awt.event.ActionEvent e)

          {

          BigDecimal oldValue = (BigDecimal) getNumTxtField()

          .getValue();

          if (oldValue != null)

          {

          getNumTxtField().setValue(

          oldValue.multiply(new BigDecimal(2)));

          }

          else

          {

          JOptionPane.showMessageDialog(

          NumberFormaterDialog1.this,"值非法");

          }

          }

          });

          }

          return jButton;

          }

          private JTextField getJTextField()

          {

          if (jTextField == null)

          {

          jTextField = new JTextField();

          jTextField.setBounds(new Rectangle(176, 83, 76, 22));

          }

          return jTextField;

          }

          public static void main(String[] args)

          {

          NumberFormaterDialog1 dlg = new NumberFormaterDialog1();

          dlg.show();

          }

          public NumberFormaterDialog1()

          {

          super();

          initialize();

          }

          private void initialize()

          {

          this.setSize(300, 200);

          this.setContentPane(getJContentPane());

          this.setTitle("JFrame");

          }

          private JPanel getJContentPane()

          {

          if (jContentPane == null)

          {

          jContentPane = new JPanel();

          jContentPane.setLayout(null);

          jContentPane.add(getNumTxtField(), null);

          jContentPane.add(getJButton(), null);

          jContentPane.add(getJTextField(), null);

          }

          return jContentPane;

          }

          }

          當(dāng)我們輸入-3這個(gè)無效值的時(shí)候是允許輸入的,但是當(dāng)鼠標(biāo)焦點(diǎn)移動(dòng)到另外的控件的時(shí)候,“-3”就會(huì)消失。這個(gè)行為可以通過NumberFormatter 的setAllowsInvalid方法來改變:

          圖 17.5

          圖 17.6

          如果輸入“10”這個(gè)合法的數(shù)字,單擊“計(jì)算”按鈕即可算出正確的值:

          圖 17.7

          圖 17.8

          案例系統(tǒng)中的com.cownew.ctk.ui.swing.JNumberTextField就是為了方便使用而從JFormattedTextField派生的一個(gè)數(shù)字輸入控件。

          DateFormatter的使用也是類似的,也允許設(shè)置最大最小值,實(shí)際上只要從InternationalFormatter派生的類,并且數(shù)據(jù)類型實(shí)現(xiàn)了Comparable接口都可以設(shè)置極值。

          MaskFormatter允許開發(fā)人員使用掩碼指定更加復(fù)雜的校驗(yàn)規(guī)則。掩碼是一串特殊的字符串,每個(gè)字符的含義如下表所示:

          字符

          說明

          #

          匹配任何數(shù)字字符

          '

          轉(zhuǎn)義符,用來將格式字符當(dāng)成普通字符用

          U

          任意大寫字母

          L

          任意小寫字母

          A

          任意數(shù)字或者字母

          ?

          任何字母

          *

          任何字符

          H

          任何十六進(jìn)制字符 (0-9, a-f or A-F).

          實(shí)例化時(shí)指定其掩碼即可:

          MaskFormatter formatter = new MaskFormatter("0x***");

          formatter.setValidCharacters("0123456789abcdefABCDEF");

          還允許為掩碼設(shè)定占位符,這樣可用性更好:

          MaskFormatter formatter = new MaskFormatter("###-####");

          formatter.setPlaceholderCharacter('_');

          formatter.getDisplayValue(tf, "123");

          posted on 2007-04-26 09:29 CowNew開源團(tuán)隊(duì) 閱讀(1605) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 临汾市| 昌平区| 灯塔市| 五华县| 章丘市| 聂拉木县| 阿拉善盟| 宣恩县| 文水县| 浦城县| 万宁市| 亚东县| 普兰县| 离岛区| 彭泽县| 南安市| 淮滨县| 蒲江县| 百色市| 常宁市| 金坛市| 茌平县| 尚义县| 且末县| 重庆市| 淅川县| 津南区| 阳朔县| 杭锦旗| 清镇市| 山西省| 双桥区| 巴彦淖尔市| 沐川县| 镇沅| 婺源县| 平舆县| 陆良县| 渭南市| 历史| 青铜峡市|