【发布时间】:2018-08-19 01:54:25
【问题描述】:
我需要将JLabel 定位在我的JFrame 中。我创建了一个标签并想设置它的位置,但setAlignment 和setBounds 都不起作用。标签一直停留在面板顶部,不会移动。
import java.awt.GridLayout;
import javax.swing.*;
public class Start extends JFrame {
//JLabel label1 = new JLabel("HELLO!");
//JLabel label2 = new JLabel("CHOOSE LANGUAGE:");
public Start() {
super();
setSize(480, 360);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
setLayout(new GridLayout(2, 1));
//setLayout(new FlowLayout());
JPanel panel1 = new JPanel();
add(panel1);
JLabel label1 = new JLabel("HELLO!");
//label1.setBounds(20,20,100,20);
//label1.SetAlignmentX(20);
//label1.SetAlignmentY(20);
panel1.add(label1);
}
public static void main(String[] args) {
Start frame = new Start();
frame.setVisible(true);
}
}
你能帮忙吗?
【问题讨论】:
-
请阅读minimal reproducible example 并相应地增强您的问题。 “不工作”不是一个有效的问题描述。
-
不要使用空布局。 Swing 旨在与布局管理器一起使用。有不同的方式来影响布局。也许您可以使用 GridBagLayout。默认情况下,组件将在框架中居中。或者可能是一个 BoxLayout。
The label stays all the time at the top of the panel and it does not move.我们不知道“移动”是什么意思。如果您希望组件距离顶部 20 像素,那么您可以在标签上使用边框。如果没有适当的要求,我们无法给出具体的建议。 -
阅读Swing Tutorial。在
Using Layout Managers和How to Use Borders上有部分可以帮助您有效地定位组件。 -
我将重复我之前的回答作为评论:您必须执行
panel1.setLayout(null)才能对 JLabel 的显式定位产生任何影响。是的,显式定位可能不是 Swing 通常的工作方式,但也不是禁止的。现在我将删除我的答案。 -
以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示额外空间应该如何被使用。
标签: java swing jlabel layout-manager