0

我正在尝试编写一个未装饰的 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);

    }   
}  

感谢您的回复。

4

2 回答 2

2

为此使用 JLayeredPane。

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

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

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

希望对你有用!

更多关于 JLayeredPanes

于 2013-08-09T21:19:50.823 回答
0

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

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

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

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

于 2013-08-10T02:59:43.793 回答