栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java Paint未在Swing中绘制

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Paint未在Swing中绘制

有多种方法可以解决您的问题。@MattiasF和@MadProgrammer是正确的:Swing在做它应该做的事情。您的

paintComponent
方法应该重绘整个场景,而不是添加到前一个场景。

到目前为止,建议的解决方案会导致应用程序执行矢量图形处理:您正在记住原始的绘制操作,并且在每个绘制上都执行每个绘制操作(Java2D对其进行了一些优化,因为它实际上不会重绘区域。当前在屏幕上不可见的区域,但要弄清楚哪些区域是可见的,哪些区域不可见,也需要花费时间。

优点是,如果需要更大或更小的图像,则可以完美地缩放绘图操作。缺点是,一旦存储了许多绘图操作,它的速度可能会变慢,并且无法(轻松)进行位图操作。

另一种方法是位图方法。您可以在内存中建立绘图的位图,然后使用该

paintComponent
方法将位图绘制到屏幕上。

优点是通常更快。它还允许位图操作,并且针对此模型进行编程通常也更容易,因为您可以在需要时进行绘制,而不是在内存中构建一系列绘制操作。缺点是它使用更多的内存(直到您执行许多绘图操作为止),并且您无法再完美地缩放图像。

为了使您的工作,例如与保存在内存中的位图,添加等领域

image
,并
imageGraphics
为您的阶级,并更换您的鼠标监听
ml
,以及在
paintComponent
用下面的代码的方法:

private BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);private Graphics2D imageGraphics = image.createGraphics();public class ml extends MouseAdapter implements MouseMotionListener, MouseListener {    public void mousePressed(MouseEvent e) {        end = e.getPoint();    }    public void mouseDragged(MouseEvent e) {        start = end;        end = e.getPoint();        imageGraphics.setColor(c);        imageGraphics.setStroke(new BasicStroke(5));        imageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        imageGraphics.drawLine(start.x, start.y, end.x, end.y);        repaint();    }    public void mouseReleased(MouseEvent e) {        start = null;        end = null;    }}public void paintComponent(Graphics g) {    super.paintComponent(g);    Graphics2D g2 = (Graphics2D) g;    g2.drawImage(image, null, 0, 0);}

您将立即看到缩放问题。位图缓冲区为500x500像素,超出此范围的任何内容都不会绘制。这基本上与Microsoft绘画的工作方式相同:开始绘制之前,您需要了解画布的大小。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号