将JLabel放在两个JButton上

时间:2016-04-12 15:57:44

标签: java swing jbutton layout-manager null-layout-manager

好的,在你问之前,是的,我没有使用任何布局管理器。不,这不会造成这种糟糕的设计(正如我在这里看到的人所说,因为有人根本就没有使用过)。问题是我希望标签始终(我的意思是总是)显示在两个按钮上(在它们留下的间隙上,这使得它无法将其作为图标或文本放在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);
}

在此之后,对我来说陌生的是,底部的按钮位于标签下方,而不是顶部的按钮......帮助!感谢

1 个答案:

答案 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?了解使用布局管理器的工作示例。