如果面板具有不同的布局,Borderlayout.EAST
布局管理器,我如何在面板上使用BoxLayout
?面板本身是否必须能够BorderLayout
经理才能使用BorderLayout.CONSTANT
?
JPanel jp1 = new JPanel();
jp1.setLayout(new BoxLayout(jp1, BoxLayout.X_AXIS));
JPanel jp2 = new JPanel(new GridLayout());
jp1.add(jp2, BorderLayout.EAST); //This worked even though jp1 is a BoxLayout, how did it use BorderLayout?
答案 0 :(得分:3)
这可能有点令人费解。当您add()
Component
到Container
时,addImpl()
会处理请求。像[{1}}这样的原始LayoutManager
了解BorderLayout.EAST
之类的常量,其BorderLayout
值为String
。较新的"East"
BoxLayout
永远不会看到未使用的约束。特别是,
如果当前布局管理器实现
LayoutManager2
,则会在其上调用LayoutManager2
。如果当前布局管理器未实现LayoutManager2.addLayoutComponent(Component,Object)
,LayoutManager2
为constraints
,则会在其上调用String
。
附录:BoxLayout
同时实施LayoutManager.addLayoutComponent(String,Component)
和LayoutManager
。虽然LayoutManager2
必须提供BoxLayout
的两种变体,但该方法是"此类不使用。"实际上,忽略了addLayoutComponent()
约束。
BorderLayout.EAST