好吧,在你问之前,是的,我没有使用任何布局管理器。不,这并不意味着这个设计很糟糕(正如我在这里看到的人们所说,因为有人根本没有使用它)。问题是,我希望标签总是(我的意思是总是)显示在两个按钮上(在它们留下的间隙上,这使得它不可能作为图标或文本放在JButton
上)。
JFrame frame = new JFrame("ColorTap");
private void init() {
JButton jb1 = new JButton(""), jb2 = new JButton("-");
JLabel label = new JLabel("TEXT HERE");
label.setForeground(Color.white);
label.setFont(new Font("Arial Bold",Font.ITALIC,30));
label.setBounds(60,249,200,100);
frame.setLayout(null);
jb1.setBounds(0, 0, 300,298);
jb2.setBounds(0, 302, 300, 300);
jb1.setBackground(Color.black);
jb2.setBackground(Color.black);
jb1.setBorderPainted(false);
jb2.setBorderPainted(false);
frame.add(label);
frame.add(jb1);
frame.add(jb2);
frame.setResizable(false);
frame.setSize(300, 628);
frame.setLocation(550, 50);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
在这之后,我更奇怪的是,底部的按钮留在标签下面,而不是顶部的按钮。。。救命!感谢
Swing经过优化,可以在二维中绘制组件。也就是说,它假设组件永远不会重叠。重叠的J按钮会导致问题,因为滚动效果只会导致按钮被绘制,而不会导致标签被绘制,因此按钮被绘制在标签的顶部。
因此,你需要告诉Swing组件确实重叠,这样Swing才能确保组件按照正确的Z顺序绘制:
JPanel panel = new JPanel()
{
@Override
public boolean isOptimizedDrawingEnabled()
{
return false;
}
};
现在,您可以设置面板的布局管理器,并将组件添加到面板中,它们将被正确绘制。
请参阅:如何将带图像的JButton放在带图像的另一个JButton之上?对于使用布局管理器的工作示例。