如何使JLabel始终保持在JButton之上?

时间:2012-03-29 06:44:48

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

所以我有一个gui,其中布局设置为Null,我把JLabel放在JButton的顶部,因为JButtons有图标并且向按钮添加文本会使按钮看起来扭曲,所以我在JButtons上使用JLabel 。每当我测试它时鼠标越过JButton,JLabel就会消失。我如何解决这个问题,以便JLabel始终出现在JButtons之上。

编辑:它扭曲了按钮,因此图标占据了大部分空间,按钮标签被按钮的相对边缘切断。

2 个答案:

答案 0 :(得分:3)

如果您正在使用JFrame,我认为您必须这样做,您可以将标签添加到位于内容窗格顶部的JLayered窗格。

答案 1 :(得分:1)

几乎没有需要使用null布局的情况。您只需要使用LayoutManagers

进行一些练习

您可以使用JLayeredPane执行您想要执行的操作。像这样:

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();

        frame.add(jLabelOnJButton());

        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private static JComponent jLabelOnJButton(){
        JLayeredPane layers = new JLayeredPane();

        JLabel label = new JLabel("label");
        JButton button = new JButton("button");

        label.setBounds(40, 20, 100, 50);
        button.setBounds(20, 20, 150, 75);

        layers.add(label, new Integer(2));
        layers.add(button, new Integer(1));

        return layers;
    }
}

我认为这不是一个好的解决方案。只有在你没有更好的解决方案时才这样做。