我正在尝试将文字字段放在JLabel
下。目前,文本字段显示在同一行上。它应该低于中心。我需要帮助。
package Gui;
import javax.swing.*;
import java.awt.*;
import java.awt.GridLayout;
public class ShowGridLayout extends JFrame {
public ShowGridLayout() {
// Set GridLayout, 3 rows, 2 columns, and gaps 5 between
// components horizontally and vertically
setLayout(new GridLayout(3, 2, 5, 5));
// Add labels and text fields to the frame
JLabel firstname = new JLabel("First Name");
add(firstname);
JTextField fistnametextField = new JTextField(8);
add(fistnametextField);
JLabel mi = new JLabel("Mi");
add(mi);
JTextField miTextField = new JTextField(1);
add(miTextField);
JLabel lastname = new JLabel("Last Name");
add(lastname);
JTextField lastnameTextField = new JTextField(8);
add(lastnameTextField);
}
/**
* Main method
*/
public static void main(String[] args) {
ShowGridLayout frame = new ShowGridLayout();
frame.setTitle("ShowGridLayout");
frame.setSize(200, 125);
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
答案 0 :(得分:4)
您只需使用一列GridLayout
:
setLayout(new GridLayout(0, 1));
请注意,GridLayout
会忽略JTextFields
的首选大小,因此使用构造函数JTextField(int columnSize)
将无效,因此默认构造函数将执行此操作。
此外,我会删除内部间距,并为JFrame
添加边框:
(JComponent)getContentPane()).setBorder(
BorderFactory.createEmptyBorder(10, 10, 10, 10) );
这将产生一个看起来像
的框架
答案 1 :(得分:1)
您正在创建一个3x2网格。也就是说,每行3列,每行2列。第一次调用add()会将组件放在第1行第1列,第二次调用将把第1行第2列放在第2行第2列中。因此它们彼此相邻。使用GridLayout,您无法对此进行太多控制。如果你想要的项目是下一个项目,你可以尝试3x1网格。或者您可以尝试以不同的顺序添加组件。或者您可以尝试使用不同的布局管理器,例如GridBagLayout,您可以在其中进行更多控制。