因此,我有一个 gui,其中布局设置为 Null,并且我将 JLabels 放在 JButtons 之上,因为 JButtons 具有图标并且向按钮添加文本会使按钮看起来失真,所以我在 JButtons 之上使用 JLabels。当我测试它时,每次鼠标经过 JButton 时,JLabel 都会消失。我该如何解决这个问题,所以 JLabels 总是出现在 JButtons 上方。
编辑:它扭曲了按钮,因此图标占据了大部分空间,并且按钮标签被按钮的相对边缘切断。
因此,我有一个 gui,其中布局设置为 Null,并且我将 JLabels 放在 JButtons 之上,因为 JButtons 具有图标并且向按钮添加文本会使按钮看起来失真,所以我在 JButtons 之上使用 JLabels。当我测试它时,每次鼠标经过 JButton 时,JLabel 都会消失。我该如何解决这个问题,所以 JLabels 总是出现在 JButtons 上方。
编辑:它扭曲了按钮,因此图标占据了大部分空间,并且按钮标签被按钮的相对边缘切断。
如果您使用的是 JFrame,我假设您必须这样做,您可以将标签添加到位于内容窗格顶部的 JLayered 窗格。
几乎没有情况需要使用空布局。你只需要对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;
}
}
我认为这不是一个好的解决方案。只有在没有更好的解决方案时才这样做。