搭建Java桌面操纵程序原型(三)[Java编程]
本文“搭建Java桌面操纵程序原型(三)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
做技术决意
在开辟历程中,我不得不去办理一些技术问题并且要做一些技术决意.下面的代码片段仅仅简单的举行了注释,但是他们将在我今后的文章中被具体描写.在这里重要的是去理解原型充当的角色.用你的原型去探求技术问题的办理筹划,去测试不常用的APIs,并且保证你的利用程序的性能.
用多层Panels
构建一个比方windows中的画板的图形利用程序不是非常复杂的任务.你必须处理鼠标事件、画线、画矩形和画椭圆.还要处理变形功效,比方从一个底子利用程序到一个专业级的图形编辑器要具有对图片的移动,缩放,重新排序、删除、复制、剪切和粘贴等更多的工作.你也可以想要包含一个可以举行编辑、重新掌握大小和文字包装功效的文字框等等.构建自己的气势文本编辑器是没有必要的,因为Swing已经供应了一些文本组件.
你怎么将Swing的文本编辑器和你自己的画图组件相集成?我考虑了两个办理筹划.一个是实现一个近似于JTable所用的cell编辑器,但是假如你想改变文本框大小大概移动它就需求一点本领了.另个一个办理筹划是用JDesktopPane,把文本组件放在JInternalFrame之内.
用第二种办理筹划的话,Swing已经供应了改变大小和移动功效,但是下面的问题是你怎么在包含文本注释的内置frame下绘制图象?并且你怎么在JDesktopPane上绘制其他简单图形,比方直线、矩形和椭圆?幸运的是,有一个简单的办理筹划,因为JDesktopPane是真正的多层Panel.原型的MainPane类扩大了JDesktopPane,有两层.它们中的一个包含PaintView自定义组件,答应你绘制简单图形.另一层包含文本注释.当然,假如一个注释图片不能被程序得到,那么这个办理办法是没有意义的.MainPanel的getAnnotatedImage()办法操纵下面的代码做这件事:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
printAll(g);
g.dispose();
在paint()外部举行绘制
Swing组件的绘制普通都是在paint()内部举行大概在paint()内部调用绘制办法.当用鼠标在屏幕上绘制一个对象,但是,你不想重绘其他组件,因为这将惹起利用程序运行效率低下.比方,用户用铅笔举行绘制,每个鼠标事件都让利用绘制一个小线段.在MOUSE_PRESSED和MOUSE_RELEASED之间有上百个MOUSE_DRAGGED事件.
当用户在屏幕仅仅绘制了一些图形时,重绘PaintView组件几百次这样的事情是不能被承受的.注意一下,PaintView处理大大都的绘制操作并且一个repaint需求全部注释包含文本注释举行重绘.精确的办理筹划是当每个鼠标事件被处理时在paint()外部操纵getGraphics()得到图形上下文.
protected void toolAction(MouseEvent e) {
e.consume();
Graphics2D g2 = (Graphics2D) getGraphics();
float zoomFactor = model.getZoomFactor();
g2.scale(zoomFactor, zoomFactor);
float x = e.getX() / zoomFactor;
float y = e.getY() / zoomFactor;
currentTool.action(e.getID(), x, y, g2);
g2.dispose();
}
PaintView组件操纵鼠标监听去处理鼠标事件.上面的办法被每一个事件所调用,拜托绘制currentTool对象.当鼠标释放的时刻,repaint()被调用去恳求整个组件的革新.因此,用户完成图形对象绘制后paint()仅仅被调用一次.这是注册鼠标监听的代码:
protected void registerListeners() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
requestFocus();
currentTool = model.createTool(AbstractTool.DRAW_STYLE);
toolAction(e);
}
}
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
toolAction(e);
model.setLastTool(currentTool);
currentTool = null;
repaint();
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e))
toolAction(e);
}
});
...
}
PaintView类的完好代码将在今后的文章中报告.上面代码片段仅仅展示了怎么操纵原型去做技术决意.
总结
原型在利用程序开辟历程中有侧重要的角色,答应你测试你的设法并且尽早的得到用户反馈.我没有把原型当作是当“真正”开辟开始时可以被丢弃的代码片段.反而,原型应当是你产品大概着利用的底子.这意味着你应当当心的对它举行编码,固然你的类或办法在今后要被重写.
以上是“搭建Java桌面操纵程序原型(三)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |