一个swing小项目(一)


程序的运行效果如下:

一个swing小项目(一)_第1张图片

这里把已经运用和将要实现的主要技术要点罗列下:

1、java如何控制组件的透明,并保证组件上的内容不透明。

2、Swing如何与服务器(我将要用tomcat7.0.3)通信。

3、分词技术的初步使用,以及调用搜索引擎搜索。

4、Jfreechart的使用

5、Jre瘦身,java程序打包成exe文件。

6、代码的优化。

本文主要是对项目雏形的代码优化和原理描述(有些功能模块我也是改造的别人的,功能实现了原理还没懂,这里我只截取片段说明,完整的程序下载)。

先打开项目:

一个swing小项目(一)_第2张图片

 

学了三大框架后,写项目要分层的思想已经根深蒂固了。基于本人的判断这个项目也要分层,因为以后还要扩展很多功能。这new项目时我果断new了个web project,因为我的设想是这个程序以后要联网。这个分包怎么分呢?先要理清业务的流程:用户在界面写入新便笺后,内容会存在本地和互联网上的服务器两处。还是先按MVC模式来分。

 

从主程序开始进行分析和优化

整个程序的界面结构如下图:

 

我看我自己写的源码居然发现我最底层用的是JDialog,当时我为什么要舍弃用惯了的JFrame而用JDialog呢??额我也想不起了,改成JFrame后界面能正常显示和关闭。

 

分析-----总体结构:

 final Container content = getContentPane();//怎么一定要final呢?

.............

//透明

             this.setUndecorated(true);

                AWTUtilities.setWindowOpaque(this,false);

                com.sun.awt.AWTUtilities.setWindowOpacity(this,(float)1.0);

               

                content.add(bottomLable);

                displayPanel.setBounds(0, 0, 250,330);

                content.add(displayPanel);

 

为什么要用container类(content)来放图片面板和输入域面板?没有this.addcontent),也能把容器添加上。

 

分析----窗口完全透明了,上面的组件不透明。

/*

 * 重写面板类,让它不随着窗口的透明而透明

 */

publicclassDisplayPanel extends JPanel{

    BufferedImagebuffImage;//BufferedImage子类描述具有可访问图像数据缓冲区的 Image

    floatalpha = 0.3f;

    publicstatic Stringpath="images//bg1.jpg";

    public DisplayPanel(){

        buffImage=loadBufImage(path);

    }

   

        public BufferedImage loadBufImage(String fileName) {

            Image image = getToolkit().getImage(fileName);

            MediaTracker mt =new MediaTracker(this);//是一个跟踪多种媒体对象状态的实用工具类

            mt.addImage(image, 0);//向此媒体跟踪器正在跟踪的图像列表添加一个图像。对每个要跟踪的图像调用其 addImage方法。另外,还可以为每个图像分配一个唯一的标识符。此标识符可控制获取图像的优先级顺序。

            //它还可用于标识可单独等待的唯一图像子集。具有较低 ID 的图像比具有较高 ID 的图像优先加载。

            try {

               mt.waitForAll();//开始加载由此媒体跟踪器跟踪的所有图像。在完成加载正在跟踪的全部图像之前,此方法一直等待。

            } catch (Exception e) {

                e.printStackTrace();

            }

                   

            BufferedImage bufImage =new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB);//创建缓冲区图像 

            Graphics bufImageG2D = bufImage.createGraphics();//Graphics类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制

            bufImageG2D.drawImage(image, 0, 0,this);//在图形环境绘制图像

            return bufImage;//返回缓冲区图像对象

        }

   

        publicvoid paint(Graphics g) {

 

Graphics2D g2d = (Graphics2D) g;//Graphics2D类扩展 Graphics 类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。

            //它是用于在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。

            int compositeRule = AlphaComposite.SRC_OVER;//AlphaComposite源排斥目标法合成规则  AlphaComposite.SRC_OVER;  在目标色之上合成源色

            AlphaComposite alphaComposite=AlphaComposite.getInstance(compositeRule,alpha);//创建AlphaComposite对象

            g2d.setComposite(alphaComposite);//设置图形环境的合成方式        

            g2d.drawImage(buffImage, 0, 0,250,330,this);//在图形环境绘制缓冲区图像

       

        }  

 

}

 

 

你可能感兴趣的:(java,swing,图形)