这些天我做了很多 Java,但主要是数据处理、算法方面的事情,并且非常强调不是图形或 UX 的东西。我对高强度视频游戏的想法是 8 位 Pong。我在应用程序中遇到过这段代码。我无法弄清楚这paintComponent是要解决什么问题。JPasswordField pass = new JPasswordField(35) { @Override protected void paintComponent (Graphics g) { g.setColor(getBackground()); Rectangle r = g.getClipBounds(); g.fillRect (0, 0, r.width, r.height); super.paintComponent(g); }};它看起来像它试图填补与当前背景色的一些地区,但这里的“剪辑范围”应该是,为什么那会不会是已经发生的事情,是我的经验之外。在源文件的其余部分中搜索“剪辑”一无所获。代码相当陈旧——在 Java 1.5 时代编写——但该应用程序一直在当前的 JRE 下运行(在撰写本文时为 Java 8 和 9)。从未报告过有关密码字段的任何视觉异常。该字段显示在其他乏味的 JPanel 中。代码的作者早已离开公司。实际上,在我来之前,作者的替代者已经离开了公司。我不相信参与这部分代码的任何人仍然在这里工作,所以没有人问。(我被要求为这样的团队做很多夹击。)我发现他们的很多旧代码都是货物崇拜式的,因为他们从其他地方的某个随机项目中复制了它公司,所以这可能更相似。本着“用棍子捅一下,看看符”,我做了一些非常基本的摆弄:更换getBackground()用Color.MAGENTA,看是否在该软件的任何转向猛烈粉红色,完全移除匿名子类,看看是否出了什么梨形,等等。似乎没有任何更改在 Windows 上产生任何明显的差异。当然,没有证据与缺乏证据而这一切,我不能证明它是不是需要一些平台上的某个地方。但是我想添加一条评论,说明旧的作者可能一直在尝试做的事情......
1 回答
慕仙森
TA贡献1827条经验 获得超8个赞
看起来它试图用当前的背景颜色填充某个区域,但是“剪辑边界”应该在哪里,以及为什么这不会发生,超出了我的经验。在源文件的其余部分中搜索“剪辑”一无所获。
“剪辑”实际上是由Graphics
上下文定义的,并且在大多数情况下,它被定义为组件边界的大小,尽管在某些情况下它可以用来提高绘画速度,但我不会看到很多在没有更多背景的情况下在这里受益
您可以查看在 AWT 和 Swing中绘画以了解更多详细信息
代码相当陈旧——写于 Java 1.5 时代
我从 1.3 开始就一直在用 Swing 写作,但从未发现需要做这样的事情
由于其中一项工作paintComponent
通常是绘制背景,而在基于文本的组件的情况下,文本、代码似乎没有做任何事情。
发现他们的很多旧代码都是货物崇拜式的,因为他们从公司其他地方的某个随机项目中复制了它,所以这可能更相似。
这可能是一个很好的评估,它可能已被用于在某个时候尝试显示占位符文本,并已修改为您现在看到的内容......作为一个疯狂的猜测。
我认为可以肯定地说你可以去除它而没有任何副作用
添加回答
举报
0/150
提交
取消