gpt4 book ai didi

java - 这个 paintComponent 重写是什么意思?

转载 作者:行者123 更新时间:2023-11-29 08:26:35 25 4
gpt4 key购买 nike

免责声明:这些天我做了很多 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);
}
};

看起来好像它试图用当前背景颜色填充某个区域,但“剪辑边界”应该在外面,以及为什么它不会发生,在外面我的经验。在源文件的其余部分搜索“clip”一无所获。

代码相当古老——编写于 Java 1.5 时代——但应用程序始终在当前 JRE(撰写本文时为 Java 8 和 9)下运行。有问题的密码字段从未报告过任何视觉异常。该字段显示在一个乏味的 JPanel 中。

代码的作者早已离开公司。实际上,在我到达之前,作者的继任者已经离开了公司。我不相信涉及这部分代码的任何人仍然在这里工作,所以没有人问。 (我被要求为这样的团队做很多捏击。)我发现他们的很多旧代码都是 cargo 崇拜式的,因为他们从其他地方的某个随机项目中复制了它公司,所以这可能更相似。

本着“用棍子戳它,看看什么坏了”的精神,我做了一些非常基本的摆弄:用 Color.MAGENTA 替换 getBackground() 看看如果软件中的任何内容都变成了强烈的粉红色,则完全删除匿名子类以查看是否有任何东西变成梨形等等。这些更改似乎在 Windows 上没有任何明显的区别。

当然,没有证据与没有证据等等,我无法证明在某个地方的某个平台上不需要它。但我想添加一条评论,说明旧版作者可能一直在尝试做什么...

最佳答案

It looks like it's trying to fill in some area with the current background color, but where the "clip bounds" are supposed to be, and why that wouldn't be happening already, is outside my experience. Searching the rest of the source file for "clip" yielded nothing.

“剪辑”实际上是由 Graphics 定义的context 并且在大多数情况下,它无论如何都被定义为组件边界的大小,尽管在某些情况下它可以用来提高绘画速度,但如果没有更多上下文,我不会在这里看到它有很大的好处

你可以看看Painting in AWT and Swing了解更多详情

The code is fairly old -- written in the days of Java 1.5

我从 Swing 1.3 开始就一直在写,从来没有发现需要做这样的事情

paintComponent 的一份工作以来通常是绘制背景,在基于文本的组件(文本)的情况下,代码似乎什么也没做。

have found a lot of their old code to be cargo-cult-esque, in that they've copied it in from some random project elsewhere in the company, so this might be more of the same.

这可能是一个很好的评估,它可能曾在某个时候用于尝试显示占位符文本,并且已被修改为您现在看到的内容......作为一个疯狂的猜测。

我认为可以肯定地说你可以移除它而没有任何副作用

关于java - 这个 paintComponent 重写是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com