你好新手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);
感谢您的帮助:)
答案 0 :(得分:3)
您的代码会将元素直接添加到JFrame
或JDialog
,默认情况下会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
时,实际上是将这些组件添加到JFrame
(JFrame.getContentPane()
)的内容窗格中。默认情况下,内容窗格使用BorderLayout
。将没有约束的组件添加到使用BorderLayout
的容器时,将它们添加到中心。由于一次只能在中心显示一个组件,因此只能看到其中一个组件。
试试这个(只是为了看效果):
getContentPane().setLayout(new FlowLayout());
看看这些教程:
答案 2 :(得分:1)
除了其他答案之外,如果要垂直堆叠Swing组件,请使用BoxLayout
布局管理器。有关详细信息,请参阅How to Use BoxLayout。