程序的运行效果如下:
这里把已经运用和将要实现的主要技术要点罗列下:
1、java如何控制组件的透明,并保证组件上的内容不透明。
2、Swing如何与服务器(我将要用tomcat7.0.3)通信。
3、分词技术的初步使用,以及调用搜索引擎搜索。
4、Jfreechart的使用
5、Jre瘦身,java程序打包成exe文件。
6、代码的优化。
本文主要是对项目雏形的代码优化和原理描述(有些功能模块我也是改造的别人的,功能实现了原理还没懂,这里我只截取片段说明,完整的程序下载)。
先打开项目:
学了三大框架后,写项目要分层的思想已经根深蒂固了。基于本人的判断这个项目也要分层,因为以后还要扩展很多功能。这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.add(content),也能把容器添加上。
分析----窗口完全透明了,上面的组件不透明。
/*
* 重写面板类,让它不随着窗口的透明而透明
*/
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);//在图形环境绘制缓冲区图像
}
}