java swing paint_Java Paint未在Swing中绘制

news/2025/2/8 22:12:42 标签: java swing paint

小编典典

有多种方法可以解决您的问题。@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绘画的工作方式相同:开始绘制之前,您需要了解画布的大小。

2020-10-18


http://www.niftyadmin.cn/n/712309.html

相关文章

封装sdk包 c++_海康工业相机SDK开发介绍

这篇文章,我来介绍一下海康工业相机SDK的使用方法。如果是老手,你可以跳过,如果是新手,可以看看,欢迎拍砖要使用海康的工业相机SDK,要先下载 机器视觉工业相机SDK V3.2.0版本Runtime组件包,这里…

理解Java动态代理(1)—找我还钱?我出钱要你的命

代理模式是最常用的一个设计模式之一,理解起来也是很简单,一张图足以说明了,LZ就不废话了。 至于代理模式能干嘛也不是LZ今天想说的,今天主要想简单介绍下JAVA里面的动态代理。“动”当然是相对“静”来说的,那么什么是…

GukiZ and Binary Operations CodeForces - 551D (组合计数)

大意: 给定$n,k,l,m$, 求有多少个长度为$n$, 元素全部严格小于$2^l$, 且满足 的序列. 刚开始想着暴力枚举当前or和上一个数二进制中$1$的分布, 但这样状态数是$O(64^3)$在加上矩阵幂的复杂度显然不行. 看了题解发现可以按每位单独来考虑. #include <iostream> #include &…

学习笔记:JAVA RMI远程方法调用简单实例

RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制&#xff0c;某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱&#xff0c;是建立分…

一步一步学习Redis——简介与安装

1.Redis REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库…

廉洁修身论文2000字_论文3000字符是几个版面

点击上方蓝字 关注我们1论文发表中字数要求是一项最基本要求&#xff0c;字数的多少关系到文章见刊占用的版面&#xff0c;很多作者在发表前也会对自己的文章以及所占版面进行大致的估算&#xff0c;控制字数对于作者和期刊来说都是很有必要的&#xff0c;论文3000字符是几个版…

jforum mysql_在linux環境下搭建JDK+JAVA+Mysql,並完成jforum的安裝

參考鏈接&#xff1a;YUM安裝MySQL和JDK和Tomcat&#xff1a;http://cmdschool.blog.51cto.com/2420395/1696206/因為我使用的是普通用戶lily&#xff0c;如果使用root的話&#xff0c;所有命令不用加sudo即可。今天先不加圖&#xff0c;改天再試試可以的話&#xff0c;再補充。…

希捷正式发布12TB硬盘:二代充氦 单碟1.5TB

在透露已经出样之后&#xff0c;希捷今天正式发布了新款Enterprise Capacity v7 12TB硬盘&#xff0c;这也是希捷的第二代充氦技术硬盘&#xff0c;面向企业和云计算市场。相比于此前的Enterprise Capacity v6 10TB&#xff0c;新硬盘增强了充氦技术&#xff0c;单盘封装多达八…