OverlayLayout似乎不是分层

时间:2012-05-02 17:30:03

标签: java swing layout overlay

我正在尝试使用OverlayLayout将一小段文本放在JTabbedPane的顶部标签上,但它似乎不起作用。

作为一个注释,我使用的是JLayeredPane,但是我需要使用TabbedPane来填充父组件,而且如果没有一些重新组合,它似乎不会起作用。

无论如何,当您单独离开路线时,行为似乎按预期工作(按钮浮在背景上)。但是,当使用任何类型的对齐时(我的理解是这是您使用此布局管理器设置位置的方式),它会将背景缩小到按钮所在的边缘。

以下是一些示例代码。

import java.awt.Color;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Container c = frame.getContentPane();
        c.setLayout(new OverlayLayout(c));

        JButton button = new JButton("Test");
        JPanel background = new JPanel();
        background.setBackground(Color.BLUE);
        background.setSize(500, 500);
        // toggle the following between 0 and 100 to see the described behavior
        background.setAlignmentX(100);

        frame.add(background);
        frame.add(button);

        frame.pack();
        frame.setSize(800, 800);
        frame.setVisible(true);

    }
}

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

您可以使用方法setGlassPane将窗格放在框架中的其他窗格上。签入http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

答案 1 :(得分:1)


如果你想真正创建覆盖另一个你看过的

的JComponents
  • JLayeredPane - >过时,您最多只能使用6.th LayeredPanes

  • JXLayer for Java6或直接实现为Java7中的JLayer

  • 对于简单叠加,您也可以使用GlassPane,