| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1494 人关注过本帖
标题:这个程序错在哪?(Java核心技术卷一P324例题)
只看楼主 加入收藏
mahayu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:160
注 册:2007-8-3
收藏
 问题点数:0 回复次数:1 
这个程序错在哪?(Java核心技术卷一P324例题)
package com.corejava.L93;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import
import
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultFormatter;
import javax.swing.text.DocumentFilter;
import javax.swing.text.InternationalFormatter;
import javax.swing.text.MaskFormatter;

import com.

public class FormatTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FormatTestFrame frame=new FormatTestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class FormatTestFrame extends JFrame {
    private JButton okButton;
    private JPanel mainPanel;

    public static final int WIDTH = 500;
    public static final int HEIGHT = 250;

    public FormatTestFrame() {
        setTitle("FormatTest");
        setSize(WIDTH, HEIGHT);

        JPanel buttonPanel = new JPanel();
        okButton = new JButton("Ok");
        add(buttonPanel, BorderLayout.CENTER);

        /**
         * 第一个数
         */
        JFormattedTextField intField = new JFormattedTextField(NumberFormat
                .getIntegerInstance());
        intField.setValue(new Integer(100));
        addRow("Number:", intField);

        /**
         * 第二个数
         */
        JFormattedTextField intField2 = new JFormattedTextField(NumberFormat
                .getIntegerInstance());
        intField.setValue(new Integer(100));
        intField2.setFocusLostBehavior();
        addRow("Number(COMMIT behavior):", intField2);

        /**
         * 第三个数
         */
        JFormattedTextField intField3 = new JFormattedTextField(
                new InternationalFormatter(NumberFormat.getIntegerInstance()) {
                    protected DocumentFilter getDocumentFilter() {
                        return filter;
                    }

                    private DocumentFilter filter = new IntFilter();
                });
        intField3.setValue(new Integer(100));
        addRow("Filtered Number", intField3);

        /**
         * 第四个数
         */
        JFormattedTextField intField4 = new JFormattedTextField(NumberFormat
                .getIntegerInstance());
        intField4.setValue(new Integer(100));
        intField4.setInputVerifier(new FormattedTextFieldVerifier());
        addRow("Verified Number:", intField4);

        /**
         * 第五个数--货币
         */
        JFormattedTextField currencyField = new JFormattedTextField(
                NumberFormat.getCurrencyInstance());
        currencyField.setValue(new Double(10));
        addRow("Currency:", currencyField);

        /**
         * 第六个数--日期
         */
        JFormattedTextField dateField = new JFormattedTextField(DateFormat
                .getDateInstance());
        dateField.setValue(new Date());
        addRow("Date(default):", dateField);

        /**
         * 第七个数--短日期格式
         */
        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
        format.setLenient(false);
        JFormattedTextField dateField2 = new JFormattedTextField(format);
        dateField2.setValue(new Date());
        addRow("Date(short,not lenient):", dateField2);

        try {
            DefaultFormatter formatter = new DefaultFormatter();
            formatter.setOverwriteMode(false);
            JFormattedTextField urlField = new JFormattedTextField(formatter);
            urlField.setValue(new URL("http://java.));
            addRow("URL:", urlField);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            MaskFormatter formatter = new MaskFormatter("###-##-####");//错误1
            formatter.setPlaceholderCharacter('0');
            JFormattedTextField ssnField = new JFormattedTextField(formatter);
            ssnField.setValue("078-05-1120");
            addRow("SSN Mask:", ssnField);
        } catch (ParseException exception) {
            exception.printStackTrace();
        }

        JFormattedTextField ipField = new JFormattedTextField(
                new IPAddressFormatter());
        ipField.setValue(new byte[] { (byte) 130, 65, 86, 66 });
        addRow("IP Address:", ipField);
    }

    public void addRow(String labelText, final JFormattedTextField field) {
        mainPanel.add(new JLabel(labelText));
        mainPanel.add(field);
        final JLabel valueLabel = new JLabel();
        mainPanel.add(valueLabel);
        okButton.addActionListener(new ActionListener() {//错误2
            public void acctionPerformed(ActionEvent event) {
                Object value = field.getValue();
                if (value.getClass().isArray()) {
                    StringBuilder builder = new StringBuilder();
                    builder.append('{');
                    for (int i = 0; i < Array.getLength(value); i++) {
                        if (i > 0)
                            builder.append(',');
                        builder.append(Array.get(value, i).toString());
                    }
                    builder.append('}');
                    valueLabel.setText(builder.toString());
                } else
                    valueLabel.setText(value.toString());
            }
        });
    }
}

class IntFilter extends DocumentFilter {
    public void insertString(FilterBypass fb, int offset, String string,
            AttributeSet attr) throws BadLocationException {
        StringBuilder builder = new StringBuilder(string);
        for (int i = builder.length() - 1; i >= 0; i--) {
            int cp = builder.codePointAt(i);
            if (!Character.isDigit(cp) && cp != '=') {
                builder.deleteCharAt(i);
                if (Character.isSupplementaryCodePoint(cp)) {
                    i--;
                    builder.deleteCharAt(i);
                }
            }
        }
        super.insertString(fb, offset, builder.toString(), attr);
    }

    public void replace(FilterBypass fb, int offset, int length, String string,
            AttributeSet attr) throws BadLocationException {
        if (string != null) {
            StringBuilder builder = new StringBuilder(string);
            for (int i = builder.length() - 1; i >= 0; i--) {
                int cp = builder.codePointAt(i);
                if (!Character.isDigit(cp) && cp != '-') {
                    builder.deleteCharAt(i);
                    if (Character.isSupplementaryCodePoint(cp)) {
                        i--;
                        builder.deleteCharAt(i);
                    }
                }
            }
            string = builder.toString();
        }
        super.replace(fb, offset, length, string, attr);
    }
}

class FormattedTextFieldVerifier extends InputVerifier {
    public boolean verify(JComponent component) {
        JFormattedTextField field = (JFormattedTextField) component;
        return field.isEditValid();
    }
}

class IPAddressFormatter extends DefaultFormatter {
    public String valueToString(Object value) throws ParseException {
        if (!(value instanceof byte[]))
            throw new ParseException("Not a byte[]", 0);
        byte[] a = (byte[]) value;
        if (a.length != 4)
            throw new ParseException("Length !=4", 0);
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int b = a[i];
            if (b < 0)
                b += 256;
            builder.append(String.valueOf(b));
            if (i < 3)
                builder.append('.');
        }
        return builder.toString();
    }

    public Object stringToValue(String text) throws ParseException {
        StringTokenizer tokenizer = new StringTokenizer(text, ".");
        byte[] a = new byte[4];

        for (int i = 0; i < 4; i++) {
            int b = 0;
            if (!tokenizer.hasMoreTokens())
                throw new ParseException("Too few bytes", 0);
            try {
                b = Integer.parseInt(tokenizer.nextToken());
            } catch (NumberFormatException e) {
                throw new ParseException("Not an integer", 0);
            }
            if (b < 0 || b >= 256)
                throw new ParseException("Byte out of range", 0);
            a[i] = (byte) b;
        }
        if (tokenizer.hasMoreTokens())
            throw new ParseException("Too many bytes", 0);
        return a;
    }
}

错误1:Unhandled exception type ParseException
错误2:The type new ActionListener(){} must implement the inherited abstract method
 ActionListener.actionPerformed(ActionEvent)
这是在eclipse3.3中编译时出现的问题,折腾半天未果....
搜索更多相关主题的帖子: import java 例题 Java awt 
2008-02-21 10:10
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
第一个错误是说ParseException这个异常类型没有被解决,第二个是说ActionListener还需要覆盖ActionListener.actionPerformed(ActionEvent)方法

I'm here, as always...
2008-02-21 10:37
快速回复:这个程序错在哪?(Java核心技术卷一P324例题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017002 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved