【发布时间】:2021-11-13 08:21:58
【问题描述】:
我在 JPanel 上用随机位置打了 10 颗星。
但问题是当我设置布局时,开始不显示。
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = frame.getContentPane();
c.setLayout(new BorderLayout());
JPanel northPanel = new JPanel(new FlowLayout());
northPanel.add(new JButton("Open"));
c.add(northPanel, BorderLayout.NORTH);
JPanel southPanel = new JPanel(new FlowLayout());
southPanel.add(new JButton("Integer Input"));
c.add(southPanel, BorderLayout.SOUTH);
JPanel centerPanel = new JPanel(null);
centerPanel.setBackground(Color.pink);
for(int i = 0; i < 10; i++) {
int x = (int) (Math.random() * 300);
int y = (int) (Math.random() * 300);
JLabel label = new JLabel("*");
label.setLocation(x, y);
label.setForeground(Color.green);
label.setOpaque(true);
centerPanel.add(label);
}
c.add(centerPanel, BorderLayout.CENTER);
frame.setVisible(true);
}
在粉红色部分,应该显示 10 颗星
【问题讨论】:
-
您已经减轻了布局管理器的角色,但似乎并没有理解他们实际上在做什么。您看不到标签,因为它们必须为实际大小(即默认为
0x0) -
如果你“绝对”必须直接控制组件的位置,那么我建议是时候构建自己的布局管理器了,for example
-
如果您想在随机位置放置 10 个“星形”图像(或 *),我建议您通过 custom painting 进行操作。
标签: java swing jlabel layout-manager border-layout