The*_*nce 1 java swing layout-manager jlayeredpane null-layout-manager
我有一个 JLayeredPane。我的程序是这样工作的:
JPanel p1 = new JPanel(new BoxLayout(p1, BoxLayout.X_AXIS));
JPanel p2 = new JPanel(new BoxLayout(p2, BoxLayout.Y_AXIS));
JLayeredPane lp = new JLayeredPane();
lp.add(p1, 1);
lp.add(p2, 0);
Run Code Online (Sandbox Code Playgroud)
p1 和 p2 都有按钮等组件...
问题是,当我将两个 JPanel 添加到 JLayeredPane 时,什么也没有出现。
我尝试更改 JLayeredPane() 的布局。
例如,我做了:
lp.setLayout(new BoxLayout(lp, BoxLayout.X_AXIS));
Run Code Online (Sandbox Code Playgroud)
然后,JPanels 确实显示,但它们显示为相邻,不尊重 JLayeredPane 的层。
我是否被迫使用空布局?
如何让我的 JLayeredPane 尊重图层并正确显示我的两个 BoxLayout JPanel?
当我给我的 JLayeredPane 一个布局时,它会显示面板,但它根本不尊重图层。
您需要一个了解 Z 轴的布局管理器。默认布局管理器不了解 JLayeredPane 的 Z 轴。
如果您只是想将内容叠加在一起,您可以使用这样的 LayoutManager:
JLayeredPane layeredFooPane = new JLayeredPane();
// The magic!
layeredFooPane.setLayout(new LayeredPaneLayout(layeredPane));
// Add components:
layeredFooPane.add(fooComponent, new Integer(JLayeredPane.DEFAULT_LAYER + 10));
layeredFooPane.add(barComponent, JLayeredPane.DEFAULT_LAYER);
Run Code Online (Sandbox Code Playgroud)
布局管理器类:
public class LayeredPaneLayout implements LayoutManager {
private final Container target;
private static final Dimension preferredSize = new Dimension(500, 500);
public LayeredPaneLayout(final Container target) {
this.target = target;
}
@Override
public void addLayoutComponent(final String name, final Component comp) {
}
@Override
public void layoutContainer(final Container container) {
for (final Component component : container.getComponents()) {
component.setBounds(new Rectangle(0, 0, target.getWidth(), target.getHeight()));
}
}
@Override
public Dimension minimumLayoutSize(final Container parent) {
return preferredLayoutSize(parent);
}
@Override
public Dimension preferredLayoutSize(final Container parent) {
return preferredSize;
}
@Override
public void removeLayoutComponent(final Component comp) {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2062 次 |
| 最近记录: |