1

你好新手java程序员,这可能是一个非常愚蠢的问题,但我在向我的视图中添加多个JLabel时遇到问题。他们似乎在互相掩护。我一直在阅读有关三个布局管理器的信息,但似乎找不到关于它们的简单教程。

    //Size and positioning
    setSize(500,400);
    setLocationRelativeTo(null);

    //Set Frame Background color

    //Set Labels
    JLabel labelTitle = new JLabel("<html><center>My CD/DVD Collection</center></html>",null,JLabel.CENTER);
    labelTitle.setFont(new Font("Arial",0 , 28));
    labelTitle.setVerticalAlignment(JLabel.TOP);
    add(labelTitle);
    labelTitle.setBorder(BorderFactory.createEmptyBorder( 50 /*top*/, 0, 0, 0 ));

    JLabel labelContent = new JLabel("<html><center> created by Daniel Del Core <br> Java</center></html>",null,JLabel.CENTER);

    add(labelContent);

谢谢你的帮助 :)

4

3 回答 3

3

您的代码将元素直接添加到 a JFrameor JDialog,默认情况下具有 a BorderLayout,因此您的所有标签都以BorderLayout.CENTER. 这就是它们重叠的原因。

这是使用 aFlowLayout为您的代码的示例。请注意,我正在使用一个面板来添加标签,并且该面板已添加到您窗口的内容窗格中。

JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
//Set Labels
JLabel labelTitle = new JLabel("<html><center>My CD/DVD Collection</center></html>",null,JLabel.CENTER);
labelTitle.setFont(new Font("Arial",0 , 28));
labelTitle.setVerticalAlignment(JLabel.TOP);
panel.add(labelTitle);
labelTitle.setBorder(BorderFactory.createEmptyBorder( 50 /*top*/, 0, 0, 0 ));

JLabel labelContent = new JLabel("<html><center> created by Daniel Del Core <br> for <br> Java Programming and Applications</center></html>",null,JLabel.CENTER);
panel.add(labelContent);
getContentPane().add(panel);
于 2012-09-21T12:12:49.717 回答
3

我猜您是针对JFrame. 当您调用add()aJFrame时,您实际上将组件添加到JFrame( JFrame.getContentPane()) 的内容窗格中。默认情况下,内容窗格使用BorderLayout. 当您将无约束的组件添加到使用 的容器时BorderLayout,您会将它们添加到中心。由于一次只能在中心显示一个组件,因此您只能看到其中一个。

试试这个(只是为了看看效果):

getContentPane().setLayout(new FlowLayout());

看看这些教程:

于 2012-09-21T12:12:54.877 回答
1

除了其他答案,如果要垂直堆叠 Swing 组件,请使用BoxLayout布局管理器。有关详细信息,请参阅如何使用 BoxLayout

于 2012-09-21T12:43:34.400 回答