gpt4 book ai didi

java - 将 JLabel 放在组件顶部

转载 作者:行者123 更新时间:2023-12-01 13:42:53 26 4
gpt4 key购买 nike

我需要将 JLabel 对象添加到面板的特定组件。我使用 setLabelFor 方法,但这个方法将标签 next 添加到组件。如何更改它以在组件顶部设置标签?

TextField sampleField = new TextField();
JLabel sampleLabel = new JLabel("sample text");
panel.add(sampleField);
sampleLabel.setLabelFor(sampleField);
panel.add(sampleLabel);

^ 这个将sampleLabel 放在sampleField 旁边。如何将sampleLabel放在sampleField之上?

提前致谢。

@编辑:

我使用这样的东西:

 public TabBody()
{
setLayout(new BorderLayout());
nameField = new TextField();
//nameField.setSize(new Dimension(200, 200));
//revalidate();
nameLabel = new JLabel("name test");
amountLabel = new JLabel("amount test");
amountField = new TextField();
unitsBox = new JComboBox(units);
unitsBox.setSelectedIndex(3);

nameLabel.setLabelFor(nameField);
amountLabel.setLabelFor(amountField);
add(nameLabel, BorderLayout.NORTH);
add(amountLabel, BorderLayout.NORTH);

add(nameField);
add(amountField);
add(unitsBox);
}

结果是:

enter image description here

我需要这样的东西:

enter image description here

最佳答案

您的JPanel默认使用FlowLayout,将组件一个接一个地放置在一行中。因为你有这样的效果。

您需要使用正确的 LayoutManager例如使用 BorderLayout :

import java.awt.BorderLayout;
import java.awt.TextField;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Example {

public static void main(String[] args){
JFrame frame = new JFrame();

JPanel panel = new JPanel(new BorderLayout());
TextField sampleField = new TextField();
JLabel sampleLabel = new JLabel("sample text");
panel.add(sampleField);
sampleLabel.setLabelFor(sampleField);
panel.add(sampleLabel,BorderLayout.NORTH);

frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

}

enter image description here

如果您需要将组件放置在网格中,例如尝试使用 GridBagLayout 逐一放置

    JPanel panel = new JPanel(new GridBagLayout());
JTextField sampleField = new JTextField(5);
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(5, 5, 5, 5);

JLabel sampleLabel = new JLabel("sample text");
panel.add(sampleLabel,c);

c.gridy++;
panel.add(sampleField,c);

c.gridy++;
panel.add(new JLabel("sample text 2"),c);

c.gridy++;
panel.add(new JTextField(5),c);

c.gridy++;
panel.add(new JTextField(5),c);

使用 GridBagConstraintsgridxgridy 属性管理位置

enter image description here .

关于java - 将 JLabel 放在组件顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com