我正在尝试编写一个未修饰的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);
}
}
感谢您的回复。
答案 0 :(得分:2)
为此使用JLayeredPane。
您需要创建一个新的JLayeredPane:
JLayeredPane layered = new JLayeredPane();
设置JFrame以将其用作内容窗格:
mainFrame.setContentPane(layered);
以这种格式添加您的组件:
layered.add(Component c, int layerNumber);
希望对你有用!
答案 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);
现在框架的尺寸应与图像相同。按钮应位于图像顶部的中心。如果您希望按钮位于其他位置,请使用其他布局管理器。