JPanel 上出现的视觉工件

2023-12-14

我正在尝试创建一个程序 2JPanel using BorderLayout。中央面板用于随机绘制矩形,而南面板用于按钮。

我在左上角看到了一个奇怪的按钮图像JFrame每当我将鼠标光标悬停在“北”或“南”按钮上时。我做了一些研究,发现这可能是透明背景的原因。我尝试使用super.paintComponent(g)对于面板,但之前绘制的其余矩形消失了。我需要将矩形留在JPanel但不是左上角的奇怪图像。

我不知道我做错了什么,希望有人可以提供帮助或提供一些有关如何解决此问题的线索。

    public class TwoBRandomRec extends JFrame{

    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        TwoBRandomRec rec = new TwoBRandomRec();

        rec.setSize(500,500);
        rec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rec.setVisible(true);
    }

    public TwoBRandomRec() {
        //Create the buttons
        JButton north = new JButton("North");
        JButton south = new JButton("South");
        DrawPanel drawPanel = new DrawPanel(500,500);

        JPanel southP = new JPanel();
        southP.add(south);
        southP.add(north);

        this.add(drawPanel, BorderLayout.CENTER);
        this.add(southP, BorderLayout.SOUTH);

        this.setTitle("TwoButtonRandomRec");
        this.pack();        
    }

    public class DrawPanel extends JPanel {

        private static final long serialVersionUID = 1L;

        private Random rand = new Random();
        private int x,y,xSize,ySize;
        private int height,width;

        public DrawPanel(int w,int h) {
            width = w;
            height = h;
        }
        public void RandomX(){
             x=rand.nextInt(width-1);
             xSize=rand.nextInt(width-x);
         }

         public void RandomY(){
             y=rand.nextInt(height-1);
             ySize=rand.nextInt(height-y);
         }

         public Color RandomColour(){
             rand.nextInt(height);
             return new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
         }

        @Override
        protected void paintComponent(Graphics g) {
            RandomX();
            RandomY();

            g.setColor(RandomColour());
            g.fillRect(x, y, xSize, ySize);
            try {
                Thread.sleep(50);

            } catch (InterruptedException e) {  
            }

            repaint();
        }
    }
}

你没有打电话super.paintComponent

protected void paintComponent(Graphics g) {
    super.paintComponent(g); // <-- Insert me here and watch problem go away
    RandomX();
    RandomY();

    g.setColor(RandomColour());
    g.fillRect(x, y, xSize, ySize);
    try {
        Thread.sleep(50); // <-- This is an INCREDIBLY bad idea, NEVER, EVER do this

    } catch (InterruptedException e) {  
    }

    repaint(); // <-- This is a bad idea, watch CPU max out...
}

您有义务致电super.paintComponent确保正确维护绘制链,并进行不透明度和图形上下文清理等操作。

The Graphics对象通过单个重绘通道在组件之间共享,未能遵守正确的绘画链将导致像您这样的问题

切勿以任何方式更新 UIpaint方法(这包括调用repaint),这只会导致你paint方法被调用,一遍又一遍……直到你的CPU达到100%并且程序挂起。

永远不要在时间内执行任何耗时或阻塞的操作paint方法(或一般的 UI),这会让程序看起来像是挂起的,让用户心烦意乱(你认为僵尸群很糟糕:P)。以这种方式阻塞会阻止 EDT 响应绘制请求...

我建议通读一下:

  • 进行定制绘画
  • 2D 图形
  • 在 AWT 和 Swing 中绘画
  • Swing 中的并发
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPanel 上出现的视觉工件 的相关文章

随机推荐

  • 读取 servlet 中的 JSON 值[重复]

    这个问题在这里已经有答案了 我将 jQuery AJAX POST 发布到 servlet 数据采用 JSON 字符串的形式 我不确定数据是否已发布 另外 我想通过从 json 对象获取登录名和密码来验证登录名和密码 这是代码片段
  • 发送请求并获取响应

    我的服务器上运行着一个 php 代码 我称之为 Web 服务 它处理发送整数值中的数据 我怎样才能得到它 这是我的请求 url NSString requestURL NSString stringWithFormat u p platfo
  • Bot 框架模拟器不工作

    我上周开始学习机器人框架 我决定从返回您的输入及其字符数的默认机器人项目开始 但不幸的是 我无法在机器人模拟器中测试机器人应用程序 它不能只发送我的输入 每当我转发输入时 它都会显示 无法发送 我的端点网址是http localhost 3
  • MYSQL中日期字段的格式化方法

    All 我需要在 MYSQL 中检索某种特定格式的日期 例如 它应该返回月 年 10 2009 我的MYSQL版本是5 1 谢谢 斯里尼瓦桑 日期格式功能 DATE FORMAT col m Y
  • jQuery 不会解析带有名为 option 的节点的 xml

    我使用 jQuery 来解析一些 XML 如下所示 function enumOptions xml xml find animal each function alert this text enumOptions
  • Matplotlib - imshow twiny() 问题

    我试图在 matplotlib imshow 图中有两个相互依赖的 x 轴 我将底部 x 轴作为半径的平方 而我希望顶部仅作为半径 到目前为止我已经尝试过 ax8 ax7 twiny ax8 sharex ax7 fmtr FuncForm
  • SecTrustEvaluate() 是否在应用程序钥匙串中查找根证书?

    文档说 如果验证叶证书所需的所有证书均未包含在信任管理对象中 则 SecTrustEvaluate 会在钥匙串搜索列表 请参阅 SecTrustSetKeychains 和系统的锚证书存储中 请参阅 SecTrustSetAnchorCer
  • 不要在服务器端代码中使用 System.out.println

    我听说使用System out println用于日志记录是一种非常糟糕的做法 这可能会迫使服务器失败 我不使用这种方法 但我很想知道为什么 System out println 在后端代码中使用时会产生如此垃圾的东西 System out
  • 如何在 Keras 中创建自定义回调?

    我有兴趣在拟合我的 keras 模型时创建回调 更详细地说 我希望每次纪元结束时都会收到来自机器人电报的带有 val acc 的消息 我知道你可以添加一个callback list作为参数classifier fit 但许多回调是由 ker
  • MATLAB - 根据向量的排序方式对矩阵进行排序[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 MATLAB 中根据一列对二维数组进行排序 将一个矩阵与另一个矩阵排序 我有一个包含 429 个值的向量 A 和一个包含 429x200 个值的矩阵 B A 和 B 中的行共享相同的索引 我的
  • 解决haskell数据记录中的循环依赖关系

    想象一下 我想编写一个处理播客提要的应用程序 为了存储来自此类提要的解析信息 我会编写如下内容 data Podcast Podcast podcastTitle String title of podcast episodes Episo
  • 数据表到 html 表

    我有一个问题 也许这里有人不介意帮助我 我有 3 个数据表 每个数据表都有以下列 大小 数量 金额 持续时间 数据表名称和值 LivingRoom 1 1 1 1 2 2 2 2 BathRoom 3 3 3 3 4 4 4 4 BedRo
  • 如何使用 Excel VBA API 获取工作簿中多个选定的工作表句柄

    有一种方法可以选择多个 Excel 工作表 然后对它们执行一些操作 例如 打印 但是 给定工作簿 我如何知道选择了哪些工作表 有一个 vba 属性 Application gt ActiveSheet 为我们提供当前活动工作表 但我找不到任
  • 如何在本机反应中显示 firestore 数据库中的图像数组?

    你好 如何在 React Native 中显示 Firestore 数据库中的图像数组 我试过了 但没有显示图像 this props user map images gt return
  • 如何从Python中的不同文件夹导入类?

    common src validation file1 py 在 common src validation 文件夹中 init 被定义为 common test validation file2 py common test valida
  • 将 cookie 会话存储添加回 Rails API 应用程序

    我有一个 Rails API 应用程序 或多或少 开箱即用 但我想添加回基于 cookie 的会话存储 这是我所做的 应用程序 控制器 application controller rb include ActionController C
  • 如何从实际的对象列表创建一个对象属性的列表?

    我有一个已定义的对象 ObservableCollectionConnection 如何从该列表中的所有连接中提取所有 URL 我想做类似的事情 但以正确的方式 ObservableCollection
  • 意外的 EOF cronjob 错误

    我有以下定时任务 2 15 mysqldump u user ppass dbname gzip 9 c gt var www backup dump date Y m d sql gz 但它会产生以下错误 bin sh c line 0
  • 在其他计算机上运行 Allegro 5

    我做了一个快板简单的游戏 但是当我在另一台计算机上打开 exe 文件时 它说有很多丢失的 dll 文件 如何使我的游戏在未安装 Visual Studio 和 Allegro 5 库的其他计算机上运行 我的评论的较长版本 当您创建应用程序时
  • JPanel 上出现的视觉工件

    我正在尝试创建一个程序 2JPanel using BorderLayout 中央面板用于随机绘制矩形 而南面板用于按钮 我在左上角看到了一个奇怪的按钮图像JFrame每当我将鼠标光标悬停在 北 或 南 按钮上时 我做了一些研究 发现这可能