我如何仍然使用Borderlayout常量与不是不同布局管理器的面板?

时间:2014-10-08 08:39:39

标签: java swing user-interface layout-manager border-layout

如果面板具有不同的布局,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?

1 个答案:

答案 0 :(得分:3)

这可能有点令人费解。当您add() ComponentContainer时,addImpl()会处理请求。像[{1}}这样的原始LayoutManager了解BorderLayout.EAST之类的常量,其BorderLayout值为String。较新的"East" BoxLayout永远不会看到未使用的约束。特别是,

  

如果当前布局管理器实现LayoutManager2,则会在其上调用LayoutManager2。如果当前布局管理器未实现LayoutManager2.addLayoutComponent(Component,Object)LayoutManager2constraints,则会在其上调用String

附录:BoxLayout同时实施LayoutManager.addLayoutComponent(String,Component)LayoutManager。虽然LayoutManager2必须提供BoxLayout的两种变体,但该方法是"此类不使用。"实际上,忽略了addLayoutComponent()约束。

BorderLayout.EAST