文章作者 100test 发表时间 2007:09:06 12:09:06
来源 100Test.Com百考试题网
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(). } |
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). } }). ... } |
相关文章
JDBC基础教程之ResultSet对象
JAVA辅导:JDBC基础教程之语句
JDBC基础教程之驱动设置
搭建Java桌面应用程序原型(三)
搭建Java桌面应用程序原型(一)
搭建Java桌面应用程序原型(二)
07年4月计算机等级考试二级JAVA试题
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛