JLabels彼此重叠

时间:2012-09-21 12:07:41

标签: java swing jframe jlabel layout-manager

你好新手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);

感谢您的帮助:)

3 个答案:

答案 0 :(得分:3)

您的代码会将元素直接添加到JFrameJDialog,默认情况下会BorderLayout,因此您的所有标签都会以BorderLayout.CENTER结尾。这就是他们重叠的原因。

以下是使用FlowLayout代码的示例。请注意,我使用面板添加标签,面板将添加到窗口的内容窗格中。

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);

答案 1 :(得分:3)

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

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

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

看看这些教程:

答案 2 :(得分:1)

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