Swing JPanel 不会重新绘制

2023-12-25

我有一个简单的对象可以扩展JPanel, 当。。。的时候update()在此对象上调用方法,这意味着向面板添加一些标签,然后重新绘制。但是调用 update 方法后标签并没有显示,下面是 update 的代码:

public void update(){
        GridBagConstraints constraints = new GridBagConstraints();

        if(cardsHidden){
            for(int i = 0; i < 2; i++){
                constraints.gridx = i;
                constraints.gridy = 0;
                JLabel card = new JLabel(PlayingCards.cardImages[PlayingCards.CARD_BACK_INDEX]);
                add(card, constraints);
            }
        }
        else{
            Card[] holeCards = player.getHoleCards();
            for(int i = 0; i < holeCards.length; i++){
                constraints.gridx = i;
                constraints.gridy = 0;
                JLabel card = new JLabel(holeCards[i].getImageIcon());
                add(card, constraints); 
            }
        }

        validate();
        repaint();
    }

有任何想法吗?

Thanks

EDIT

solved:

事实证明,HoleCardsPanel没有正确添加到其父框架。修复后添加新的JLabel工作正常。我也:

  • 将调用添加到update()事件调度线程的方法使用SwingUtillities.invokeLater
  • 不得不打电话validate()从最上面的组件(在这种情况下JFrame) 作为 Devon_C_Miller在他的回答中建议 https://stackoverflow.com/a/2157762/1048186.

这取决于您想要发生的情况以及使用的布局管理器,但基本规则是:

  1. 确保update在 EDT 上调用。如果不是(SwingUtilities.isEventDispatchThread()返回 false)你需要使用SwingUtilities.invokeLater安排 EDT 上的更新。例如:

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            update();
        }});
    
  2. Call invalidate()。大多数更改组件的操作都会为您完成此操作。因此,只有当以下内容无法单独工作时,您才需要调用它。

  3. Call validate() on the highest受影响的组件。这可能是 Java 渲染周期中最混乱的部分。致电给invalidate标记该组件及其所有祖先由于需要布局。致电给validate执行组件及其所有内容的布局后人。一个“向上”工作,另一个“向下”工作。你需要打电话validate在树中将受您的更改影响的最高组件上。

    另外,在顶级组件(JWindow、JDialog、JFrame)上调用 validate 不一定会调整该组件的大小。要实现这一点,您需要致电pack() or setSize().

  4. 如果您的更改改变了容器的大小或位置,则调整大小的容器将重新绘制,但它们不会擦除容器的空间used to占据。呼唤repaint()在容器的父级上将导致其重新绘制背景,纠正损坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swing JPanel 不会重新绘制 的相关文章

  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

    这是一个简单的 pojo public class Description private String code private String name private String norwegian private String en
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • 解决 Java Checkstyle 错误:名称 'logger' 必须匹配模式 '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'

    使用 Eclipse Checkstyle 插件我看到以下错误 名称 logger 必须匹配模式 A Z A Z0 9 A Z0 9 我通过更改解决了此错误 private static final Logger logger Logger
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 为什么应该首选 Java 类的接口?

    PMD https pmd github io 将举报以下违规行为 ArrayList list new ArrayList 违规行为是 避免使用 ArrayList 等实现类型 而是使用接口 以下行将纠正违规行为 List list ne
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • 编写可访问 Django 数据库功能的 Python 程序的最简单方法

    我有一个网站 它定期从 RSS 提要中获取信息 目前是手动获取 这是我的问题 目前 这是作为普通的 Django 视图实现的 在我看来这不是很好 我想要一个使用 cronjob 运行的 Python 程序 而不是手动访问正确的 URL 来更
  • Django Admin - 如何防止删除某些内联

    我有 2 个模型 例如 Book 和 Page Page 有一个 Book 的外键 每个页面都可以标记为 was read 布尔值 我想防止删除已读取的页面 在管理中 在管理中 页面是书中的内联 我不希望页面成为管理中的独立模型 我的问题
  • ScheduledExecutorService 在正常 OS / JVM 上的准确性

    I use ScheduledExecutorService scheduleAtFixedRate运行日常任务 如下所示 executor scheduleAtFixedRate task d 24L 3600 1000 TimeUnit
  • 一般从实体框架返回一个项目

    我遇到过这样的情况 网站可以根据字符串从我的数据库中请求数据 不用担心 我正在防止 SQL 注入 出于各种原因 我希望有一个方法可以返回用户期望的对象 从 EF 最终通过部分页面返回 我在想这样的事情 public
  • 如何在 Qt Creator 中“在 malloc_error_break 中设置断点进行调试”?

    当我点击关闭窗口返回时 我的 Qt5 应用程序崩溃了 MyApp 28741 0x7fff7aa73000 malloc error for object 0x7fc40bc8e300 pointer being freed was not
  • Java 成员枚举类型应该大写吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这里有个问题 我们有 Java 枚举 它们是它们自己的类 而枚举是类的成员 public enum reportType 每次我看到这个都会让我
  • Kafka主题创建:等待节点分配超时

    我有一个本地 Kafka 使用以下命令运行docker compose yml file version 2 services zookeeper image confluentinc cp zookeeper 5 0 1 environm
  • WebGL 与 openGL 中的着色器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用着色器在 WebGL 中使用 特别是在 Three js 中 WebGL 和 Three js
  • EcsService 下班后不稳定

    我从头开始编写了一个 cloudformation JSON 文件 但我无法部署堆栈 并且我没有从 AWS 获得任何关于原因的信息 它卡在服务中CREATE IN PROGRESS4 5 小时 然后它说该服务did not stabiliz
  • sailsjs 数组查询 精确匹配

    我想在 sailsjs 中查询 mongodb 这是我的数据库的结构 users 52ed09e1d015533c124015d5 52ed4bc75ece1fb013fed7f5 user msgs sender 52ed09e1d015
  • 如何在stable/prometheus图表values.yaml中设置prometheus规则?

    使用官方Prometheus chart stable prometheus 定制其values yaml要设置的文件alertmanager yml文件和serverFiles area At rules https github com
  • 大型多CPU系统上的快速进程间(线程间)通信IPC

    对于进程间通信来说 最快的可移植双向通信机制是什么 其中一个应用程序的线程需要与同一台计算机上另一个应用程序中的多个线程通信 并且通信线程可以位于不同的物理 CPU 上 我假设它将涉及共享内存和循环缓冲区以及共享同步机制 但是 当线程在不同
  • SimpleTest 与 PHPunit

    我想知道是否有任何在这方面有经验的人可以解释一下重要的两者之间有什么区别吗 每种方法有什么特定的优势使其适用于任何特定情况吗 这个问题已经过时了 但由于它仍然有流量和答案 尽管我在这里再次陈述我的观点 但我已经在其他一些 较新的 问题上做到
  • 加载 .DLL 文件并访问其中类的方法?

    我对加载这样的库完全陌生 但这就是我的立场 我有一个自制的 DLL 文件 它非常简单 包括类本身和方法 在加载该库的主程序中 我有 Assembly testDLL Assembly LoadFile C dll test dll 从这里开
  • MongoError:未知修饰符:节点js中的$pushAll

    我在保存模型失败时遇到问题mongo 错误 MongoError 未知修饰符 pushAll 我有一个数组字段subDomains在我的架构中 它将使用子域保存为默认值 如下所示 already Domain instance get av
  • 停止 ListView 所选项目的更改,直到按下按钮

    所以我在尝试创建的应用程序中遇到了问题 我创建了一个示例应用程序来演示该问题 在应用程序中 我试图停止所选项目TableView如果未按回车键 则不会更改TextField 在我的实施中 我得到了StackOverFlow错误 我明白为什么
  • 评估预请求脚本时出错

    我正在尝试通过 Post 请求脚本访问 Postman 中 POST 请求的响应 我在下面添加了这两行Pre request Script let response pm response json console log JSON Res
  • SQLite,如何获取数据库中的所有表名?

    您认为从数据库获取所有表名并将它们添加到列表中的正确方法是什么 现在已经到了这一步了 final ArrayList
  • Laravel 守护进程队列内存泄漏

    我正在使用 laravel 5 1 并使用主管来监视队列作业 队列驱动程序是数据库 program queue process name program name s process num 02d command php var www
  • Swing JPanel 不会重新绘制

    我有一个简单的对象可以扩展JPanel 当 的时候update 在此对象上调用方法 这意味着向面板添加一些标签 然后重新绘制 但是调用 update 方法后标签并没有显示 下面是 update 的代码 public void update