Java 如何使用setLayout(null)使JPanel保持在onTop(z轴上)

Java 如何使用setLayout(null)使JPanel保持在onTop(z轴上),java,swing,jpanel,repaint,always-on-top,Java,Swing,Jpanel,Repaint,Always On Top,我有一个名为Scene的JPanel,其中包括以下JPanel: 框架,投影仪,工具 我在场景中使用空布局,因为我想使用特定坐标,所以没有其他布局适合我。我使用以下代码将3个JPanel添加到主JPanel场景中 setLayout(null); add(Tools); add(Frame); add(Projector); 我使用此顺序是因为我希望工具始终位于顶部(在z轴上) 现在,如果我在投影仪中做了一些导致重新绘制的操作,那么投影仪将位于其他层的顶部,隐藏工具。我可以用一条线来重新绘制整

我有一个名为
Scene
的JPanel,其中包括以下JPanel:
框架
投影仪
工具

我在
场景中使用空布局
,因为我想使用特定坐标,所以没有其他布局适合我。我使用以下代码将3个JPanel添加到主JPanel
场景中

setLayout(null);
add(Tools);
add(Frame);
add(Projector);
我使用此顺序是因为我希望
工具
始终位于顶部(在z轴上)

现在,如果我在
投影仪
中做了一些导致重新绘制的操作,那么
投影仪
将位于其他层的顶部,隐藏
工具
。我可以用一条线来重新绘制整个
场景
JPanel,但是当
投影仪
从顶部进入底部时,我看到这个“闪光”,我不想这样做


任何想法?

< P>如果你想把组件放在它们的Z轴之上,那么考虑使用JayrErdPANE作为主容器,然后使用<代码>添加(……)/代码>方法来添加组件,该方法将整数作为第二个参数。应该使用
JLayeredPane添加最底层。默认\u层
,我认为是0。这将允许非oqaque顶部组件通过它们显示较低的组件

这是一个很好的问题,但是更多的代码会很有帮助。具体来说,您需要创建并发布一个。另外,不要认为“没有布局适合我”,因为很可能这正是你需要的——一个体面的工作布局。。。。但鉴于目前发布的信息,很难说。预期的结果是什么?请注意,“在顶部”也不明确。如果您的意思是应该将其放置在容器的上部位置,那么容器(此处为场景JPanel——请注意,变量名称应以小写字母开头,因此场景而非场景)应使用BorderLayout,并且工具组件应添加到BorderLayout.PAGE_start。如果说“在顶部”,你的意思是它应该覆盖其他组件,那么你需要使用CardLayout来交换组件,或者如果你想覆盖但显示底层组件,则需要使用JLayeredPane。
“但我认为创建3个JPanel并不是那么难”
——我同意,这是你的问题,也是你的问题,所以无论如何,用3个JPanel创建你的小程序,并在这里发布你的问题来帮助我们。努力的责任应该在你身上,因为1)这是你的问题,2)我们是志愿者。仍然需要重新油漆主容器,以便
工具
到达顶部again@GiannisTzagarakis:仍然需要创建和发布为我们演示此问题的内容。关于答案,我所能做的就是使用您给我们的。@GiannisTzagarakis Swing布局在设计上很懒惰,它们允许您向容器添加许多组件,而无需更新容器层次结构或安排重新绘制,直到您告诉它这样做,这就是API的设计方式我用4个JPanel制作了一个小程序,它工作得很好。。也许java在跟我开玩笑。@GiannisTzagarakis:不,这只是意味着你还没有分离出这个bug。继续添加代码,直到错误出现。