【发布时间】:2016-03-26 20:12:38
【问题描述】:
我有一个名为 Scene 的 JPanel,其中包括以下 JPanel:
Frame, Projector, Tools.
我在Scene 上使用空布局,因为我想使用特定的坐标,所以没有其他布局适合我。我使用以下代码将 3 个 JPanel 添加到主 JPanel Scene。
setLayout(null);
add(Tools);
add(Frame);
add(Projector);
我使用此顺序是因为我希望 Tools 始终位于顶部(在 z 轴上)。
现在,如果我在 Projector 中执行导致重绘的操作,则 Projector 会出现在其他层之上,隐藏 Tools。我可以使用线程重新绘制整个Scene JPanel,但是当Projector 出现在顶部并继续底部时,我看到了这个“闪光”,我不想这样做。
有什么想法吗?
【问题讨论】:
-
这是个好问题,但更多代码会有所帮助。
-
特别需要创建并发布minimal reproducible example。此外,不要认为“没有任何布局适合我”,因为这很可能正是您所需要的——一个体面的工作布局......但鉴于目前发布的信息很难说。
-
预期的输出是什么??
-
请注意,“在顶部”也是模棱两可的。如果你的意思是它应该放在其容器的上部位置,那么容器(这里是场景JPanel——注意变量名应该以小写字母开头,所以场景,而不是场景)应该使用BorderLayout,并且应该添加工具组件 BorderLayout.PAGE_START。如果“在顶部”是指它应该覆盖其他组件,那么如果要覆盖但显示底层组件,则需要使用 CardLayout 来交换组件或 JLayeredPane。
-
"but I think creating 3 JPanels is not that hard"-- 我同意,这是您的问题,也是您的问题,所以请务必使用 3 个 JPanel 创建您的小程序,并通过发布您的问题来帮助我们。努力的责任应该由您承担,因为 1)这是您的问题,2)我们是志愿者。
标签: java swing jpanel repaint always-on-top