我试图制作一个看起来像这样的文本列表:
我有这段代码:
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);
然而,它看起来像这样:
我已经读过setBounds()
方法中的第二个参数是Y位置,但如果我把它设为非常高,它就不会改变。为什么它没有正确显示?
答案 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
来实现此功能。请考虑使用此信息更改您的代码,如果还有问题,请更新您的答案。