如何使用JLabels将文本放在另一个上面?

时间:2014-05-02 11:26:14

标签: java jlabel setbounds

我试图制作一个看起来像这样的文本列表:

image1

我有这段代码:

panelPunts = new JPanel();
panelPunts.setBackground(Color.GRAY);
biggerPanel.add(panelPunts, BorderLayout.EAST);

JLabel titol = new JLabel();
titol.setText("<html><h1><u> Points</u></h1></html>");
titol.setBounds(0, 0, 200, 50);
panelPunts.add(titol);

JLabel etnia1 = new JLabel();
etnia1.setText("Team A: 20");
etnia1.setBounds(0, 20, 200, 50);
panelPunts.add(etnia1);

JLabel etnia2 = new JLabel();
etnia2.setText("Team A: 10");
etnia2.setBounds(0, 40, 200, 50);
panelPunts.add(etnia2);

然而,它看起来像这样:

image2

我已经读过setBounds()方法中的第二个参数是Y位置,但如果我把它设为非常高,它就不会改变。为什么它没有正确显示?

2 个答案:

答案 0 :(得分:1)

尝试

JPanel panelPunts = new JPanel();

panelPunts.setLayout(new GridLayout(3,1));

JPanel默认使用FlowLayout,绝不使用setBounds()。保留布局管理器以设置组件的位置

有关更多示例代码,请查看A Visual Guide to Layout Managers


提示:只需将标题中的最后两个标签分开即可。在另一个JPanel

中添加标签

示例代码:(使用GridBagLayout

    JPanel panelPunts = new JPanel();
    panelPunts.setLayout(new GridBagLayout());
    panelPunts.setBackground(Color.GRAY);

    GridBagConstraints gc = new GridBagConstraints();
    gc.gridx = 0;
    gc.gridy = 0;
    gc.anchor = GridBagConstraints.NORTH;
    gc.insets = new Insets(5, 5, 5, 5);

    JLabel titol = new JLabel();
    titol.setText("<html><h1><u> Points</u></h1></html>");
    panelPunts.add(titol, gc);

    gc.gridy = 1;
    JLabel etnia1 = new JLabel();
    etnia1.setText("Team A: 20");
    panelPunts.add(etnia1, gc);

    gc.gridy = 2;
    JLabel etnia2 = new JLabel();
    etnia2.setText("Team A: 10");
    panelPunts.add(etnia2, gc);

答案 1 :(得分:1)

请不要使用NullLayout,而是使用任何其他LayoutManager(请考虑使用GridLayout)。初始化JPanel时使用的FlowLayout是标准布局,并且不适用于此任务。此外,您的setBounds方法调用仅在使用NullLayout时才相关...您不应该这样做。您也可以使用JList而非多个JLabels来实现此功能。请考虑使用此信息更改您的代码,如果还有问题,请更新您的答案。