繁体   English   中英

JLayeredPane:深度和位置之间的功能差异是什么?

[英]JLayeredPane: what's the functional difference between depth and position?

我正在为学校Java项目开发Connect Four游戏。 我已经获得了JLayeredPane的'how',它正如预期的那样工作,但我并没有完全理解某个概念背后的“原因”。

这是我的理解:

JLayeredPane是一个类似于JPanel的容器,允许您为每个组件指定深度和位置。 深度是一个整数,0表示底层,n-1表示顶层,n表示组件数。 Position是一个int(是的,一个使用整数包装类,一个只是一个原语!),它指定了一个组件在层中的位置,0是最顶层,-1是最底层,正是ints in之间,数字越低,位置越高。 因此,单个层中的四个组件可以从最顶部到最底部排序到位置0,1,2,-1。

我的问题是,有两个概念需要什么?

例如,我创建了三个带有图像的JLabel:frontBoard,backBoard和piece。 这件作品有时会在frontBoard前面,有时会在frontBoard和backBoard之间。 我们来看看第二个例子。

我可以通过以下任何一种方式获得相同的效果:

1)我可以将backBoard设置为0层,位置0; 片断到第1层,位置0; 和frontBoard到第2层,位置0

 or 

2)我可以将backBoard设置为0层,位置-1; 片断到0层,位置1; 和frontBoard到0层,位置0

我已经测试了这两种方法,但我找不到这两种方法之间的功能差异。

任何人都可以为我揭开这个谜团的光芒吗?

首先,在这种情况下最好的做法是查看教程,它们通常非常有用: http//download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

此外,类的javadoc本身包含了JLayeredPane工作方式的很好的解释。

由于您已经实现了项目,因此您知道可以通过两种不同的方式实现组件堆叠:将每个组件放在自己的层上,或者通过分配位于同一层上不同位置值的不同组件。 效果是一样的,但您可以使用两个不同的属性来实现它:

  • “depth”图层的属性:它们被枚举,因此深度为0的图层是最低的图层。 深度较高的图层覆盖深度较低的图层。
  • 由于层可以包含多个组件,并且由于组件总是可以重叠,因此必须有一种方法来定义层组件的z顺序:这是通过枚举具有“位置”值的组件来实现的。 如果图层中有n组件并且您从0开始计数,则位置必须是介于0和n-1之间的值。

现在你可以争辩说,由于你有“位置”值,你根本不需要多个层,因为你可以简单地通过它们的“位置”值沿z轴定位所有组件。 这是事实,没有人阻止你这样做。

当您意识到有一个预定义常量用于图层的“深度”值时,可以看到多个图层的基本原理:

  • DEFAULT_LAYER
  • PALETTE_LAYER
  • MODAL_LAYER
  • POPUP_LAYER
  • DRAG_LAYER

这些只是复杂多窗口应用程序的逻辑分组,可帮助您确保满足某些堆叠约束:假设您要创建一个显示在主应用程序框架顶部的模式对话框窗口。 如果使用单个图层,则必须自己跟踪所有可见组件的位置,并将对话框的位置设置为n。 现在添加拖放动画,弹出菜单等,这个任务变得非常复杂。

通过使用预定义层,这种复杂性降低了。 如果你想显示一个模态对话框窗口,你不关心主应用程序窗口的组件,只需将它放在MODAL_LAYER上就可以了:你可以确定它显示在所有其他组件之上。

幸运的是,Swing已经为你做了所有这些事情(通过在内部使用JLayeredPane或其子类),所以你可以在JDialog上调用setVisible(boolean)或setModal(boolean),它会以你期望的方式运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM