覆盖paint或paintComponent时需要恢复图形原始状态

2023-12-26

我意识到大多数Java代码都覆盖了paint或paintComponent,它们中的大多数在改变图形对象的状态后并没有恢复图形对象的旧状态。例如,setStroke、setRenderingHint...

我想知道在从方法返回之前恢复图形对象的旧状态是否是一个好的做法。例如

public void paintComponent(Graphics g) {
    super.paintComponet(g);
    Stroke oldStroke = g.getStroke();
    g.setStroke(newStroke);
    // Do drawing operation.
    g.setStroke(oldStroke);
}

这是一个好的做法吗?还是已经结束了?


您根本不应该更改传入的 Graphics 对象,而应该对其然后处置的副本执行所有图形操作。那时根本不需要重置状态。

public void paintComponent(Graphics g1) {
    super.paintComponent(g1);
    final Graphics2D g = (Graphics2D)g1.create();
    try {
         // ...Whole lotta drawing code...
    } finally {
         g.dispose();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖paint或paintComponent时需要恢复图形原始状态 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • python telebot 得到了意想不到的响应

    我一直在使用我的 Telegram 机器人使用 python 的远程机器人库从我的台式计算机向我发送不同的通知 很长一段时间一切都正常工作 但有一天它停止工作了 这是代码 Python 2 7 import telebot import s
  • 在 Safari 中检测 iOS 上的初始设备方向

    我知道怎么做检测设备方向变化 https developer apple com library safari documentation SafariDOMAdditions Reference DeviceOrientationEven
  • OSGI捆绑异常,maven依赖问题

    我对 OSGI Felix 和 Maven 还很陌生 刚刚开始使用 我正在通过 jenkins 部署 java 构建 并且遇到以下依赖问题 下面是包含依赖项的pom文件内容 我不确定它是否正确 但它仍然抱怨它 它正在寻找 javax jws
  • Qt Creator 无法在 Mac 上启动调试

    最近 我怀疑某些系统 自制程序更新 Qt 的调试器停止工作 它永远挂在Setting up inferior 内部日志 dStart parameters QGIS mode 1 dABI x86 darwin generic mach o
  • SQL 如果没有返回行则执行此操作

    我有一个 select 语句 我想说如果这个 select 语句不返回任何行 则在每个单元格中放置一个 我该怎么做呢 select a b c from t if rowcount 0 select as a as b as c 但请确保你
  • 如何在Python中使用BeautifulSoup从标签中提取innerHTML

    我正在尝试使用以下代码从标签中提取innerHTML theurl http na op gg summoner userName Darshan thepage urlopen theurl soup BeautifulSoup thep
  • google oauth2 刷新令牌何时过期?

    google oauth2 刷新令牌何时过期 我所说的过期的意思是由于已经过了一定的时间跨度而过期 不是因为用户已撤销访问权限或因为用户已请求新的刷新令牌 我做了一些研究 但没有一个引用官方谷歌文档 我也找不到有效的谷歌文档 其他一些问题说
  • Mongo 更新子文档

    我在使用 MongoDB 时似乎遇到了障碍 并且想知道是否有解决方案 而无需修改我的数据库结构 现在我的数据库结构如下 Company id 1 properties property id 1 tags tag id 1 tag valu
  • 使用 PHP/AJAX 从 HTML 表单发送电子邮件

    我想将用户从 HTML 表单填写的信息发送到我的电子邮件地址 根据我的理解 由于电子邮件工作方式的性质 仅使用客户端编码无法完成此操作 因此建议使用 PHP 与 AJAX 结合 来处理服务器端代码 我跟着导游here https stack
  • 无法在 x86 ubuntu linux 上添加自定义系统调用

    我对此很陌生 刚刚了解内核 我正在尝试添加对内核 4 20 4 的自定义调用 这是我所做的步骤 首先我创建文件 kernel printmsg c 包含代码 include
  • 在 Windows 7 上安装 Cabal-dev

    我正在尝试在 Windows 7 上安装 Cabal dev 我已经设法通过使用以下方法解决了无法构建网络的问题 cabal install constraint network installed cabal dev 但是后来我得到了这个
  • Spring Mvc java.io.FileNotFoundException - ApplicationContext.xml

    applicationContext xml 位于 WEB INF 文件夹中 为什么我收到此错误 org springframework beans factory BeanDefinitionStoreException IOExcept
  • IE9 开发者工具中的 IE9 兼容性视图是什么?

    我正在查看 IE 9 开发人员工具 当我单击浏览器模式时 我会看到一个列表 IE 7 IE 8 IE 9 IE 9 Compatibility View 那有什么作用 IE 9 和 IE 9 兼容性视图有什么区别 The main区别在于用
  • kali linux python3-pip 面临的问题

    我面临这个问题 sudo apt get install python3 pip Reading package lists Done Building dependency tree Reading state information D
  • 逆向工程 iWork '13 格式

    Apple iWork 套件的早期版本使用非常简单的文档格式 文档是资源包 文件夹 压缩或未压缩 该捆绑包包含一个index apxl z 以专有但相当容易理解的模式描述文档结构的文件 iWork 13 完全重做了格式 文档仍然是捆绑包 但
  • 如何在 Asp.net MVC 中使用代码优先方法更新模型和数据库

    我是新来的mvc 我创建了一个MVC应用程序 我在其中使用过code first方法 现在我有两张桌子Deal and Comment 现在我想添加一个新表Category在数据库和新列中类别ID in Deal table 我如何更新数据
  • Android PICASSO - 图像未加载到 ImageView + 停止发生以下所有语句

    背景 我的 java 文件中有一个 Picasso 语句 它读取 JSON 然后将该数据格式化到屏幕上 问题 读取 JSON 后 Picasso 不会将图像从 URL 加载到 ImageView 而是停止此后发生的所有语句 例如在 Text
  • 从 bmp 中获取平均颜色

    我正在为第二个屏幕开发一个任务栏 类似于displayfusion 但是 我很难从图标中获得正确的平均颜色 例如 Google Chrome 当我将其悬停在主任务栏上时 它的背景会变成黄色 使用我的代码它会变成橙色 红色 现在看起来是这样的
  • 设计函数 f(f(n)) == -n

    上次面试时我被问到的一个问题 设计一个函数f 这样 f f n n Where n是32位的有符号整数 你不能使用复数算术 如果您无法为整个数字范围设计这样的函数 请为尽可能最大的范围设计它 有任何想法吗 你没有说他们期望什么样的语言 这是
  • 覆盖paint或paintComponent时需要恢复图形原始状态

    我意识到大多数Java代码都覆盖了paint或paintComponent 它们中的大多数在改变图形对象的状态后并没有恢复图形对象的旧状态 例如 setStroke setRenderingHint 我想知道在从方法返回之前恢复图形对象的旧