好的,在你问之前,是的,我没有使用任何布局管理器。不,这不会造成这种糟糕的设计(正如我在这里看到的人所说,因为有人根本就没有使用过)。问题是我希望标签始终(我的意思是总是)显示在两个按钮上(在它们留下的间隙上,这使得它无法将其作为图标或文本放在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);
}
在此之后,对我来说陌生的是,底部的按钮位于标签下方,而不是顶部的按钮......帮助!感谢
答案 0 :(得分:0)
优化Swing以在两个维度上绘制组件。也就是说它假设组件永远不会重叠。重叠JButton会导致问题,因为翻转效果只会导致按钮被绘制,而不是标签,因此按钮被涂在标签的顶部。
所以你需要告诉Swing组件是否重叠,因此Swing可以确保组件在适当的ZOrder中绘制:
JPanel panel = new JPanel()
{
@Override
public boolean isOptimizedDrawingEnabled()
{
return false;
}
};
现在您可以设置面板的布局管理器并将组件添加到面板中,它们将被正确绘制。
请参阅:How to put a JButton with an image on top of another JButton with an image?了解使用布局管理器的工作示例。