JFrame setComponentZOrder()更改对象的大小

时间:2013-08-09 21:09:34

标签: java swing jframe

我正在尝试编写一个未修饰的JFrame。我正试着把我的按钮放在我的背景标签上。但是,设置按钮的Z顺序会导致按钮拉伸到jframe的大小,setBounds()和setSize()都不会改变这种情况。这是我的代码:

import javax.swing.*;

public class MyApp {

    public static void main(String[] args) {

        JFrame mainFrame = new JFrame();
        mainFrame.setBounds(0, 112, 100, 50);
        mainFrame.setLayout(null);
        mainFrame.setUndecorated(true);

        JLabel lblBackground = new JLabel(new ImageIcon(JFrame.class.getResource("/res/green.png")));
        lblBackground.setBounds(0, 0, 100, 50);

        JButton btnStart = new JButton("");
        btnStart.setBounds(5, 15, 10, 15);

        mainFrame.add(lblBackground);
        mainFrame.add(btnStart);
        mainFrame.setComponentZOrder(btnStart, 0); 
        mainFrame.setComponentZOrder(btnStart, 1); 


        mainFrame.setVisible(true);

    }   
}  

感谢您的回复。

2 个答案:

答案 0 :(得分:2)

为此使用JLayeredPane。

您需要创建一个新的JLayeredPane: JLayeredPane layered = new JLayeredPane();

设置JFrame以将其用作内容窗格: mainFrame.setContentPane(layered);

以这种格式添加您的组件: layered.add(Component c, int layerNumber);

希望对你有用!

More on JLayeredPanes

答案 1 :(得分:1)

不要使用null布局。 Swing旨在与布局管理器一起使用

将按钮添加到标签。例如:

JLabel label = new JLabel(...);
label.setLayout( new FlowLayout() );
JButton button = new JButton(...);
label.add( button );
frame.add(label);
frame.pack();
frame.setVisible(true);

现在框架的尺寸应与图像相同。按钮应位于图像顶部的中心。如果您希望按钮位于其他位置,请使用其他布局管理器。