java - 我怎样才能将 Borderlayout 常量用于不是不同布局管理器的面板?

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

对于具有不同布局的面板(即 BoxLayout 布局管理器),我如何能够在面板上使用 Borderlayout.EAST?面板本身不是必须能够使用 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?

最佳答案

这可能有点令人费解。当您将 add() 一个 ComponentContainer 时,addImpl()处理请求。像 BorderLayout 这样的原始 LayoutManager 可以理解 BorderLayout.EAST 这样的常量,它具有 String"East"。较新的 LayoutManager2,例如 BoxLayout永远不会看到未使用的约束。特别是,

If the current layout manager implements LayoutManager2, then LayoutManager2.addLayoutComponent(Component,Object) is invoked on it. If the current layout manager does not implement LayoutManager2, and constraints is a String, then LayoutManager.addLayoutComponent(String,Component) is invoked on it.

附录:BoxLayout同时实现 LayoutManagerLayoutManager2。尽管 BoxLayout 必须提供 addLayoutComponent() 的两种变体,但该方法“未被此类使用”。实际上,BorderLayout.EAST 约束被忽略。

void    addLayoutComponent(Component comp, Object constraints)
        Not used by this class.
void    addLayoutComponent(String name, Component comp)
        Not used by this class.

关于java - 我怎样才能将 Borderlayout 常量用于不是不同布局管理器的面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26252551/

相关文章:

java - 当我需要时更改 JList 项目颜色

user-interface - TextFormFields 之间的空间

java - 在java中将字母表示为数字

java - 使 JLabel 可复制?

java - 如何在 FXML 中为 ColorPicker 设置默认颜色

java - 如何将 JTextField 中的数据传输到 JLabel?

java - ImageJ 叠加 ROI 缩放

Java 在可运行 Jar 文件的内容之间来回移动

java - c3p0 在 awaitAvailable 中挂起并 hibernate

java - 如何将 PrimaryAddress 中的字段直接保留在我的表中?在我的表中,我没有 PrimaryAddress 列,但其中的所有字段都是列本身