在两个J按钮上加一个JLabel



好吧,在你问之前,是的,我没有使用任何布局管理器。不,这并不意味着这个设计很糟糕(正如我在这里看到的人们所说,因为有人根本没有使用它)。问题是,我希望标签总是(我的意思是总是)显示在两个按钮上(在它们留下的间隙上,这使得它不可能作为图标或文本放在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之上?对于使用布局管理器的工作示例。

相关内容

  • 没有找到相关文章

最新更新