由于我不会详细讨论的原因,我仅限于使用流程布局管理器。这样做的明显问题以及我将组件保持在同一条线上的必要性是,它会将组件进一步推向框架下方,因为它们超出了面板边缘。
我可以使用哪些方法来对齐组件以确保标签及其相应的文本字段出现在同一行?
如果我理解正确的话,主要问题是标签和输入是分开的(标签在右侧,输入在左侧下一行)。
解决该问题的一种方法是将标签和输入字段分组到一个子面板中,并将该子面板添加到使用 FlowLayout 的主面板中。
下面的代码说明了这种技术:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
* @author acampos
*/
public class Main02 {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
JPanel mainPanel = new JPanel();
JPanel dynamicPanel;
JLabel dynamicLabel;
JTextField dynamicInput;
for (int i = 0; i < 5; i++) {
// Creates the panel that will contain the Label AND the Input
dynamicPanel = new JPanel();
// Creates the dynamic label
dynamicLabel = new JLabel("Label " + i + ": ");
// Creates the dynamic text field
dynamicInput = new JTextField(10);
// Adds the label and the text field to the dynamic panel
dynamicPanel.add(dynamicLabel);
dynamicPanel.add(dynamicInput);
dynamicPanel.setSize(100, 100 );
// Adds the dynamic panel to the main panel <-- HERE IS THE KEY
mainPanel.add(dynamicPanel);
}
// Set the FlowLayout to the MAIN PANEL, so the dynamic panels
// will 'flow' but the label and the text field will be kept together
mainPanel.setLayout(new FlowLayout(3));
// Adds the main panel (which contains the dynamic panels) to the main frame
jFrame.add( mainPanel );
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
jFrame.setSize(600, 150);
jFrame.setResizable(true);
}
}
当您运行此代码(是的,您可以运行它)并更改 jFrame 的大小时,您会看到标签和输入不再分开。