有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这个组件重写的目的是什么?

免责声明:我现在做了很多Java,但主要是数据处理、算法方面的事情,而且非常强调而不是图形或UX方面的东西。我对高强度视频游戏的想法是8位乒乓球

我在一个应用程序中遇到了这段代码。我想不出这个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”时没有得到任何结果

代码相当陈旧——编写于Java1.5时代——但应用程序始终在当前的JRE下运行(撰写本文时为Java8和Java9)。从未有任何关于密码字段的视觉异常报告。该字段显示在另一个无聊的JPanel中

代码的作者早已离开公司。事实上,在我到达之前,作者的替代者已经离开了公司。我不相信任何涉及这段代码的人仍然在这里工作,所以没有人可以问。(我被叫去为这样的球队打很多扣球。)我发现他们的很多旧代码都是cargo cult风格的,因为他们是从公司其他地方的某个随机项目中复制过来的,所以这可能更相似

本着“用棍子戳一下,看看有什么东西坏了”的精神,我做了一些非常基本的摆弄:用Color.MAGENTA替换getBackground(),看看软件中是否有任何东西变成了强烈的粉红色,完全删除匿名子类,看看是否有任何东西变成了梨形,所有这些变化似乎都没有对Windows产生任何明显的影响

当然,缺乏证据与缺乏证据等等,我无法证明在某个平台上不需要它。但我想补充一点,说明《老》的作者可能一直在试图做什么


共 (1) 个答案

  1. # 1 楼答案

    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.

    “clip”实际上是由Graphics上下文定义的,在大多数情况下,它被定义为组件边界的大小,尽管在某些场景中它可以用来提高绘制速度,但如果没有更多上下文,我看不到它有多大好处

    您可以查看Painting in AWT and Swing了解更多详细信息

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

    我从1.3开始就在Swing中写作,从未发现有必要这样做

    由于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.

    这可能是一个很好的评估,它可能曾被用于尝试在某个点显示占位符文本,并被修改为您现在看到的内容。。。胡乱猜测

    我认为可以肯定地说,你可以去掉它而不产生任何副作用