Java Swing工具的布局问题
我试图制作一个简单的GUI注册代码窗口,它有一个文本来输入代码,还有一个按钮来验证输入的代码是否正确。与此图像完全相同: 因此,我尝试使用java Swing库使用java实现GUI,这是我的代码:Java Swing工具的布局问题,java,swing,layout,layout-manager,grid-layout,Java,Swing,Layout,Layout Manager,Grid Layout,我试图制作一个简单的GUI注册代码窗口,它有一个文本来输入代码,还有一个按钮来验证输入的代码是否正确。与此图像完全相同: 因此,我尝试使用java Swing库使用java实现GUI,这是我的代码: import java.awt.*; import javax.swing.*; public class MainClass { public static void main(String[] args) { // TODO Auto-generated metho
import java.awt.*;
import javax.swing.*;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
final JFrame appFrame = new JFrame();
final JPanel gridPanel = new JPanel(new GridLayout(2,1));
Font f = new Font(Font.SERIF, Font.PLAIN, 20);
JButton registerButton = new JButton("Register!");
registerButton.setFont(f);
JTextField verificationCodeText = new JTextField("--Enter your registration key here--");
registerButton.setSize(30,20);
verificationCodeText.setSize(50,20);
verificationCodeText.setHorizontalAlignment(SwingConstants.CENTER);
Border border = BorderFactory.createLineBorder(Color.BLACK, 5);
verificationCodeText.setFont(f);
verificationCodeText.setBorder(border);
gridPanel.add(verificationCodeText);
gridPanel.add(registerButton);
appFrame.add(gridPanel);
appFrame.setSize(400,400);
appFrame.setVisible(true);
System.out.println("End");
}
}
但我得到的是:
我可以用布局做什么来纠正这个问题
(注意:忽略第一幅图像中的外部黑框,这只是为了澄清)最好嵌套JPanel,根据需要混合布局,并使用填充,例如通过空边框,这比绝对设置大小要好。使用与此类似的代码例如,下面的示例使用BorderLayout作为总体布局,然后将使用JPanel(默认JPanel布局)的FlowLayout添加到主JPanel的顶部,并将使用JPanel的GridBagLayout添加到主JPanel的中心。如果以默认(无约束)方式添加,GridBag将使单个组件居中:
最好嵌套JPanel,根据需要混合布局,并使用空白边框等填充,这比绝对设置大小要好。使用与此类似的代码例如,下面的示例使用BorderLayout作为总体布局,然后将使用JPanel(默认JPanel布局)的FlowLayout添加到主JPanel的顶部,并将使用JPanel的GridBagLayout添加到主JPanel的中心。如果以默认(无约束)方式添加,GridBag将使单个组件居中:
嵌套您的JPanel以实现此效果,并且不使用GridLayout我必须使用哪种类型的JPanel?哪种类型必须嵌套?下面是一个示例。但是没有什么是一成不变的——玩你的代码,做实验,看看什么最有效……看看Oracle的教程,布局管理器的视觉指南:嵌套你的JPanel以实现这一效果,不要使用GridLayout我必须使用哪种类型的JPanel?哪种类型必须嵌套?下面是一个示例。但任何东西都不是一成不变的——玩你的代码,做实验,看看什么最有效……看看Oracle的教程,一本布局管理器的视觉指南:
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import javax.swing.*;
@SuppressWarnings("serial")
public class RegistrationGUI extends JPanel {
private JButton registerButton = new JButton("Register!");
private JTextField verificationCodeText = new JTextField("--Enter your registration key here--", 20);
public RegistrationGUI() {
JPanel topPanel = new JPanel();
int gap = 35;
topPanel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
verificationCodeText.setHorizontalAlignment(SwingConstants.CENTER);
topPanel.add(verificationCodeText);
JPanel bottomPanel = new JPanel(new GridBagLayout());
gap = 60;
bottomPanel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
bottomPanel.add(registerButton);
setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
add(bottomPanel, BorderLayout.CENTER);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
RegistrationGUI mainPanel = new RegistrationGUI();
JFrame frame = new JFrame("Registration");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}