我想在地图上显示许多不同的标签,所以我在面板中使用空布局,并为每个标签调用setLocation。但是,出于某种原因,标签没有显示。如果我删除pan.setLayout(null),则标签将显示在面板的顶部中心。为什么null布局不能与setPosition一起使用?
package mapa;
import java.awt.*;
import javax.swing.*;
public class Mapa extends JFrame {
private static JPanel pan;
private static JLabel lab;
public Mapa() {
}
private static void createAndShowGUI() {
Mapa frame = new Mapa();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lab = new JLabel("TEXTO");
lab.setBackground(Color.black);
lab.setForeground(Color.white);
lab.setOpaque(true);
lab.setVisible(true);
pan = new JPanel();
pan.setLayout(null);
pan.setPreferredSize(new Dimension(640,480));
pan.add(lab);
lab.setLocation(100, 100);
frame.getContentPane().add(pan, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
答案 0 :(得分:5)
这是绝对定位(或null
布局)的问题。它要求您设置所有组件的大小,否则它们将保持默认的零大小并且不会出现。这就是为什么使用layout manager总是更好。
答案 1 :(得分:2)
您必须明确设置标签的大小;尝试使用setBounds
代替setLocation
。例如,lab.setBounds(100,100,200,30);
此外,无需在标签上调用setVisible(true);
。
除非有充分的理由使用空布局并且您确切知道自己在做什么,否则使用布局管理器总是应该从哪里开始。