Java 核心技术(第八版)卷1:基础知识:例11-2P498LoggingImageViewer

这是一个应用窗口,可以打开一个gif图片,并且浏览显示出来,同时还有另外一个窗体负责日志的记录,挺好玩的。

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Locale;
import java.util.logging.*;
import javax.swing.*;
//一个image viewer 程序的修改版,可以记录多个事件





public class LoggingImageViewer {
    public static  void main(String [] args)
    {

        if(System.getProperty("java.util.logging.config.class") ==null&&System.getProperty("java.util.logging.config.file")==null)
        {
            try
            {
                Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);
                final int LOG_ROTATION_COUNT=10;
                Handler handler=new FileHandler("%h/LoggingImageViewer.log",0,LOG_ROTATION_COUNT);
                Logger.getLogger("com.horstmann.corejava").addHandler(handler);
            }
            catch (IOException e)
            {
                Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,"Can not create log file handler",e);
            }
        }
        EventQueue.invokeLater(new Runnable(){
            public void run()
            {
                Handler windowHandler=new WindowHandler();
                windowHandler.setLevel(Level.ALL);
                Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);

                JFrame frame=new ImageViewerFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
                frame.setVisible(true);

            }
        });
    }

}
// 负责显示 图片的 frame
class ImageViewerFrame extends JFrame
{
    public ImageViewerFrame()
    {
        logger.entering("ImageViewerFrame","<init>");
        setTitle("LoggingImageViewer");
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        //创建menu bar
        JMenuBar menuBar=new JMenuBar();
        setJMenuBar(menuBar);

        JMenu menu=new JMenu("File");
        menuBar.add(menu);
        JMenuItem openItem=new JMenuItem("Open");
        menu.add(openItem);
        openItem.addActionListener(new FileOpenListener());

        JMenuItem exitItem=new JMenuItem("Exit");
        menu.add(exitItem);
        exitItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                logger.fine("Exiting.");
                System.exit(0);
            }
        });
        //use a label to display the images
        label=new JLabel();
        add(label);
        logger.exiting("ImageViewerFrame","<init>");
    }
    private  class FileOpenListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            logger.entering("ImageViewerFrame.FileOpenListener","actionPerformed",event);
            //set up file chooser
            JFileChooser chooser=new JFileChooser();
            chooser.setCurrentDirectory(new File("."));
            //accept all files ending with .gif
            chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
            {
                public boolean accept(File f)
                {
                    return f.getName().toLowerCase(Locale.ROOT).endsWith(".gif")||f.isDirectory();
                }
                public String getDescription()
                {
                    return "GIF Images";
                }
            });
            //show file choose dialog
            int r=chooser.showOpenDialog(ImageViewerFrame.this);
            //if image file accepted,set it as icon of the label
            if(r==JFileChooser.APPROVE_OPTION)
            {
                String name=chooser.getSelectedFile().getPath();
                logger.log(Level.FINE,"Reading file{0}",name);
                label.setIcon(new ImageIcon(name));
            }
            else logger.fine("File open dialog canceled");
            logger.exiting("ImageViewerFrame.FileOpenListener","actionPerformed");
        }
    }
    private  JLabel label;
    private static Logger logger=Logger.getLogger("com.horstmann.corejava");
    private static final int DEFAULT_WIDTH=300;
    private static final int DEFAULT_HEIGHT=400;
}
// a handler for displaying log records in a window
class WindowHandler extends StreamHandler
{
    public WindowHandler()
    {
        frame=new JFrame();
        final JTextArea output =new JTextArea();
        output.setEditable(false);
        frame.setSize(200,200);
        frame.add(new JScrollPane(output));
        frame.setFocusableWindowState(false);
        frame.setVisible(true);
        setOutputStream(new OutputStream()
        {
            public void write(int b)
            {
                //not called
            }
            public void write(byte[]b,int off,int len)
            {
                output.append(new String (b,off,len));
            }
        });
    }
    public void publish(LogRecord record)
    {
        if(!frame.isVisible()) return;
        super.publish(record);
        flush();
    }
    private JFrame frame;
}


运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值