Java - repaint(x, y, w, h) 不调用paintComponent? (与 SSCCE 一起)

2023-11-29

我之前问过这个问题,但只是理论上的,没有 SSCCE。现在,我已经创建了一个,但问题仍然存在。我想知道为什么paintComponent没有被召唤repaint(x, y, w, h),但被调用repaint().

两类:

SANDBOX

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;

public class Sandbox {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setMinimumSize(new Dimension(800, 600));
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new FlowLayout());

        // Add label
        f.getContentPane().add(new TLabel());

        f.setVisible(true);
    }
}

and TLabel(有一点造型):

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

@SuppressWarnings("serial")
public class TLabel extends JLabel {
    public TLabel() {
    super("TEST LABEL, NON-STATIC");
    this.setHorizontalAlignment(SwingConstants.CENTER);
    TLabel.this.setPreferredSize(new Dimension(200, 50));
    TLabel.this.setMaximumSize(new Dimension(200, 50));
    TLabel.this.setMinimumSize(new Dimension(200, 50));

    TLabel.this.setOpaque(true);
    TLabel.this.setBackground(Color.cyan.darker().darker());
    TLabel.this.setForeground(Color.white);
    TLabel.this.setBorder(new LineBorder(Color.orange, 2));

    this.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                // EXPECTED BEHAVIOR HERE: This line will call paint and paintComponent.
                //repaint();

                // PROBLEM HERE: This line will not call paint or paintComponent.
                repaint(TLabel.this.getBounds());
        }
    });
    }

    @Override
    public void paint(Graphics g) {
    // Note: This is called once when the label is realised.
    // Note: This is called when the mouse enters the frame.
    System.out.println("PAINT.");
    super.paint(g);
    }

    @Override
    public void paintComponent(Graphics g) {
    // Note: This is called once when the label is realised.
    // Note: This is called when the mouse enters the frame.
    System.out.println("REPAINT.");
    super.paintComponent(g);
    }
}

你叫这个

repaint(TLabel.this.getBounds());

TLabel 对象内部。因此 repaint 将尝试在 Bounds 位置绘制一个相对于自身的矩形,但 getBounds() 返回一个相对于该组件的矩形包含对象的位置而 repaint 需要相对于组件本身的边界。因此,您尝试绘制一个具有 JLabel 宽度和高度但位于 x = 292 和 y = 5 的矩形相对于 JLabel,当您希望 x 和 y 都为 0 时。本质上,您试图在该组件之外绘制路径。

而是尝试这个:

        //!! repaint(TLabel.this.getBounds());
        Dimension d = TLabel.this.getSize();
        repaint(new Rectangle(0, 0, d.width, d.height));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - repaint(x, y, w, h) 不调用paintComponent? (与 SSCCE 一起) 的相关文章

随机推荐

  • Facebook 页面访问令牌 - 这些令牌会过期吗?

    我正在构建一个应用程序 允许用户管理他们的 Facebook 粉丝页面 这需要以下两个访问令牌 用户访问令牌 页面访问令牌 我非常熟悉用户访问令牌 但不熟悉页面访问令牌 有人知道页面访问令牌的有效期是多久吗 我在 Facebook 网站上能
  • 如何在动态列表视图中导航到下一页 - Flutter

    我有一个清单类别并使用将其显示在 ListTile 中列表视图生成器 我想转到被点击的特定类别页面 代码示例 final category Category One Category Two Category Three 我正在写导航器 p
  • 仅返回数组中的重复条目(不区分大小写)

    我想从数组中检索所有不区分大小写的重复条目 这在 PHP 中可能吗 array 1 gt 1233 2 gt 12334 3 gt Hello 4 gt hello 5 gt U 所需的输出数组 array 1 gt Hello 2 gt
  • 创建一个可以通过 USB 线发送/接收数据的 iPad 应用程序?

    我想创建一个 iPad 应用程序 通过 USB 连接到另一台机器 笔记本电脑或其他设备 并与我开发的运行在那里的其他应用程序进行通信 我知道这很容易通过蓝牙或 WiFi 实现 但这套特定的解决方案必须通过 USB 电缆完成 是否可以在不访问
  • Android,setonclicklistner 动态生成文本视图数组

    我有一个动态生成的文本视图数组 for int i 0 i lt blog link counter i textViewArray i new TextView this textViewArray i setText Html from
  • Apache POI 在读取 xlsx 文件时获取单元格颜色

    大家好 我正在读一本xlsx文件使用XSSF of Apche POI 现在我想读取单元格的颜色并在新单元格上应用相同的颜色xlsx文件 我该怎么做呢 我的代码是 public void readXLSXFile String filePa
  • JQuery 自动完成

    我的 jQuery 自动完成字段有问题 这有点奇怪 这是我的自动完成字段和脚本 我的 mvc 函数的响应工作正常 下拉列表是可见条目 但是当我尝试选择一个项目时 结果列表就会消失 有人有想法吗 div class ui widget div
  • Android:如何将联系人保存到 SD 卡作为 vCard。没有重复项?

    我正在尝试将手机上的所有联系人作为 vcf 文件 vCard 保存到 SD 卡中 它有效 但我有一个问题 每个具有多个电话号码 手机号码和工作号码 的联系人都会保存两次 这两个号码都在每个重复的联系人中 因此它们是正确的 只是重复的 有人可
  • 如何使用 Java 将 bytea 列下载为文件

    我想使用java下载以bytea格式存储的文件 我没有超级用户权限 使用下面的代码我下载十六进制编码的文件并将其转换为pdf 但转换后的pdf已损坏 而如果我通过终端使用 copy函数 不能在java中使用 复制 下载过程会顺利进行 Str
  • opencv - 计算来自canny的非方向边

    谁能帮助我如何使用opencv cannyedge检测来计算非方向边缘的数量 我有一个来自 opencv 的 cannyEdge 图像 我想要一个基于边缘方向的直方图 这样我就可以计算方向和非方向边缘的数量 我认为您将边缘检测与梯度检测混淆
  • 如何在codeigniter中加载phpseclib

    如标题所示 有人实现了吗 将此库包含到 codeigniter v2 1 2 中的最佳实践是什么 我知道它可以通过像任何其他 PHP 应用程序一样简单地使用 include require 语句来完成 但是由于该项目一旦完成将移交给多个开发
  • 质因数和 JavaScript

    我被用于解决问题的 JavaScript 代码所困扰 该代码指出 13195 的质因数是 5 7 13 和 29 数字 600851475143 的最大质因数是多少 这不是作业 是在线编码 数学挑战 所以我想出了这个解决方案
  • Python:发送电子邮件时,始终在子句中被阻止:smtpserver = smtplib.SMTP("smtp.gmail.com",587)

    我正在编写一个 Python 程序来发送电子邮件 但每次执行该子句时 smtpserver smtplib SMTP smtp gmail com 587 它会阻塞在这里并始终保持执行状态 没有任何提示和错误 我不知道为什么 谁能帮助我 代
  • 创建 Python RPM

    我一直在阅读有关为 Python 2 6 4 创建 RPM 的内容 在此页面中 http docs python org distutils builtdist html它说你可以使用当前Python创建一个RPMpython setup
  • 使用 LINQ 查找重复行(带有指定列的列表)

    我使用下面的代码获取 3 列的重复行 字符串 日期 货币 我想知道是否有任何通用方法可以在此 LINQ 中输入动态列名列表来查找重复的行 DataTable allDuplicates dt AsEnumerable GroupBy dr
  • Windows 和 Linux 服务器中出现爆炸错误 \r\n 和 \n

    我使用爆炸函数将文本区域内容基于行获取到数组中 当我在本地主机 WAMPserver 2 1 中运行此代码时 它与此代码完美配合 arr explode r n getdata 当我上传到我的Linux服务器时 我每次都需要将上面的代码更改
  • Azure AD 预检请求未返回数据

    我目前正在尝试发送帖子请求至https login microsoftonline com XXX oauth2 token用于检索应用程序的访问令牌和刷新令牌的端点 使用 axios 向端点发送 post 请求时 会发送预检 但不会返回任
  • 在 devise、ruby on Rails 中以管理员身份编辑其他用户

    我在 Ruby on Rails 项目中使用 devise 并且用户具有管理属性 架构 rb create table users force cascade do t t boolean admin default false end 我
  • PHP 使 if 更短

    什么是真正的写法 if variable value1 value2 value3 它的工作原理应该类似于 if variable value1 variable value2 variable value3 只是想让这段代码更短 现在我使
  • Java - repaint(x, y, w, h) 不调用paintComponent? (与 SSCCE 一起)

    我之前问过这个问题 但只是理论上的 没有 SSCCE 现在 我已经创建了一个 但问题仍然存在 我想知道为什么paintComponent没有被召唤repaint x y w h 但被调用repaint 两类 SANDBOX import j