读书频道 > 网站 > 网页设计 > Java数字图像处理:编程技巧与应用实践
3.5 一个完整的Swing UI Demo
15-12-08    下载编辑
收藏    我要投稿   
本书分为两大部分,其中第一部为前三章,主要介绍Java Swing编程的基础知识。第二部分是本书的核心内容,系统全面地介绍图像处理的各种方法与常见应用场景编程实现。如果你已经对Java语言和Java Swing有基本的立即去当当网订购

本节将根据前面前四节所讲的Swing UI组件应用知识,实现一个真正的Swing UI演示,以更加贴近实际编程的方式来说明Swing中组件的应用知识。首先来介绍一下要实现的功能:

通过文件对话框选择图像文件,刷新JFrame中的内容面板实现图像显示。

通过单击[处理]按钮实现对图像的必要处理,然后刷新显示图像。

大致的UI组件布局如图3-1所示。


 

其中支持BufferedImage对象显示的自定义JPanel类的实现如下:

package com.book.chapter.three;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

public class ImagePanel extends JPanel {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private BufferedImage sourceImage;
    private BufferedImage destImage;

    public ImagePanel() {

    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.clearRect(0, 0,
        this.getWidth(),
        this.getHeight());
        if (sourceImage != null) {
            g2d.drawImage(sourceImage, 0, 0,
                    sourceImage.getWidth(),
                    sourceImage.getHeight(), null);
            if (destImage != null) {
                g2d.drawImage(destImage,
                sourceImage.getWidth() + 10, 0,
                destImage.getWidth(),
                destImage.getHeight(), null);
            }
        }
    }

    public void process()
    {
        // do nothing
    }

    public BufferedImage getSourceImage() {
        return sourceImage;
    }

    public void setSourceImage(BufferedImage sourceImage) {
        this.sourceImage = sourceImage;
    }

    public BufferedImage getDestImage() {
        return destImage;
    }

    public void setDestImage(BufferedImage destImage) {
        this.destImage = destImage;
    }

}
SwingUI界面实现与JButton按钮监听处理的类的代码如下:
package com.book.chapter.three;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;

public class MainUI extends JFrame
        implements ActionListener {

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public static final String IMAGE_CMD = "选择图像...";
    public static final String PROCESS_CMD = "处理";

    private JButton imgBtn;
    private JButton processBtn;
    private ImagePanel imagePanel;

    // image
    private BufferedImage srcImage;

    public MainUI()
    {
        setTitle("JFrame UI - 演示");
        imgBtn = new JButton(IMAGE_CMD);
        processBtn = new JButton(PROCESS_CMD);

        // buttons
        JPanel btnPanel = new JPanel();
        btnPanel.setLayout(new
                     FlowLayout(FlowLayout.RIGHT));
        btnPanel.add(imgBtn);
        btnPanel.add(processBtn);

        // filters
        imagePanel = new ImagePanel();
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(imagePanel,
                     BorderLayout.CENTER);
        getContentPane().add(btnPanel, BorderLayout.SOUTH);

        // setup listener
        setupActionListener();

    }

    private void setupActionListener() {
        imgBtn.addActionListener(this);
        processBtn.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if(SwingUtilities.isEventDispatchThread())
        {
            System.out.println("Event Dispath Thread!!");
        }

        if(srcImage == null)
        {
            JOptionPane.showMessageDialog(this,
                        "请先选择图像源文件");
            try {
                JFileChooser chooser =
                        new JFileChooser();
                setFileTypeFilter(chooser);
                chooser.showOpenDialog(null);
                File f = chooser.getSelectedFile();
                if(f != null)
                {
                    srcImage = ImageIO.read(f);
                    imagePanel.setSourceImage(
                            srcImage);
                    imagePanel.repaint();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return;
        }
        if(IMAGE_CMD.equals(e.getActionCommand()))
        {
            try {
                JFileChooser chooser =
                        new JFileChooser();
                setFileTypeFilter(chooser);
                chooser.showOpenDialog(null);
                File f = chooser.getSelectedFile();
                if(f != null)
                {
                    srcImage = ImageIO.read(f);
                    imagePanel.setSourceImage(
                            srcImage);
                    imagePanel.repaint();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            imagePanel.repaint();
        }
        else if(PROCESS_CMD.equals(e.getActionCommand()))
        {
            imagePanel.process();
            imagePanel.repaint();
        }
    }

    public void setFileTypeFilter(JFileChooser chooser)
    {
        FileNameExtensionFilter filter =
            new FileNameExtensionFilter(
                "JPG & PNG Images", "jpg", "png");
            chooser.setFileFilter(filter);
    }

    public void openView()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(800, 600));
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        MainUI ui = new MainUI();
        ui.openView();
    }
}

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站