0

我正在尝试制作一个如下所示的文本列表:

图像1

我有这个代码:

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

但是,它看起来像这样:

图2

我读过该setBounds()方法中的第二个参数是 Y 位置,但是如果我将其设置得非常高,它不会改变。为什么不能正确显示?

4

2 回答 2

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);
于 2014-05-02T11:28:18.590 回答
1

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

于 2014-05-02T11:28:32.437 回答