Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摆动刷新周期_Java_Swing_Refresh_Repaint - Fatal编程技术网

Java 摆动刷新周期

Java 摆动刷新周期,java,swing,refresh,repaint,Java,Swing,Refresh,Repaint,我试图理解何时使用重新验证/重新喷漆/打包 令人惊讶的是,我还没有找到详细的引擎盖下的文档(请随意链接) 到目前为止,我了解到这是重新油漆经理的全部责任 油漆/重新油漆指被视为脏/干净的东西 打包/验证/重新验证指的是什么是有效的 说明调用重绘使事件调度程序线程上的作业排队,该线程将调用组件上的paintInstance()(这将重绘组件) 指示有效或无效与LayoutManager关联。这都是关于组件的大小,而不是内容 当您移动/调整组件大小时应该调用revalidate,当您更改组件内容

我试图理解何时使用重新验证/重新喷漆/打包

令人惊讶的是,我还没有找到详细的引擎盖下的文档(请随意链接)

到目前为止,我了解到这是重新油漆经理的全部责任

  • 油漆/重新油漆指被视为脏/干净的东西
  • 打包/验证/重新验证指的是什么是有效的
说明调用重绘使事件调度程序线程上的作业排队,该线程将调用组件上的paintInstance()(这将重绘组件)

指示有效或无效与LayoutManager关联。这都是关于组件的大小,而不是内容

  • 当您移动/调整组件大小时应该调用revalidate,当您更改组件内容时应该重新绘制,这是真的吗
  • pack()方法真的是一个不推荐使用的东西吗
  • 上述任何一种说法都是错误的吗

  • 下面是一些需要调用这些方法的基本情况(我介绍了一些基本情况,但可能遗漏了一些需要调用这些方法的其他情况)

  • 当您添加了一个或多个组件、删除了一个或多个组件、更改了一个或多个包含组件的约束(约束或XXXSize(),尽管不建议使用后者)、更改了容器的
    布局管理器时,应在容器上调用
    revalidate()
  • 每当需要重新绘制组件(及其子体)时,都应该调用
    repaint()
    。最终,这将调用
    paintComponent()
    (对于基本小部件,这将委托给XXXUI.paint())、
    paintBorder()
    paintChildren()
    (至少在Swing中)
  • pack()
    实际上将窗口的大小设置为其首选大小。您通常应该在使窗口可见之前调用此选项。稍后您可能会调用它,但这将提供一种奇怪的用户体验(我不知道有多少应用程序会在显示窗口后调整其大小)

  • 使用
    revalidate()
    repaint()
    的主要优点是它们可以合并。这意味着,如果多次调用
    repaint()
    ,则只能执行一次绘制。

    您可以根据绘制所意味的更改来定义绘制吗?我开始怀疑我是否完全理解它的意思。@kotoko我不确定我是否得到了你想要的答案(请写下你的评论)。当您绘制(实现
    paintComponent()
    方法)时,意味着您绘制直线、圆(填充或不填充)、矩形(填充或不填充)、图像、文本等。。。(所有在
    图形/Graphics2D
    上实际可以调用的操作)。我试图了解什么方法触发了什么。现在我明白了(经验法则):布局/组件相关操作影响是否有效(1);Graphics/Graphics2D操作会影响是否脏。我发现了一个与您所说相反的示例:带有固定面板的拆分窗格,当我在固定面板上删除所有()时,在我重新绘制之前,任何内容都不会更新。@kotoko它与我在回答中所述的内容有何矛盾?我可能没有直接说的是,几乎在任何时候调用
    revalidate()
    repaint()
    ,也应该在之后立即调用(但事实并非相反)