Java Swing 登录表单
Posted
技术标签:
【中文标题】Java Swing 登录表单【英文标题】:Java Swing Login Form 【发布时间】:2021-06-17 23:09:28 【问题描述】:我正在尝试使用 Java Swing 创建登录表单。但我希望布局看起来更紧凑,但仍然响应迅速。
我的项目结构
Project/
└── src
├── GUI
│ ├── Control.java
│ ├── Main.java
│ └── pages
│ ├── LoginPanel.java
└── Helper
└── Helpers.java
编辑
在尝试发布的答案后,我得到:
This is the picture
form
面板中的组件的行为与我预期的不同
还有我的代码:
登录面板
package GUI.pages;
import javax.swing.*;
public class LoginPanel extends JPanel
private static final int PADDING = 30;
// Some labels, button, groups and fields
private static JLabel usernameLabel;
private static JTextField usernameInputField;
private static JLabel passwordLabel;
private static JPasswordField passwordInputField;
private static JButton submit;
private static JLabel title = Helpers.generateTitle();
public LoginPanel()
setLayout(new BorderLayout());
setSize(400, 400);
JPanel titleContainer = new JPanel();
titleContainer.setLayout(new FlowLayout(FlowLayout.LEFT, PADDING, PADDING));
titleContainer.add(title);
// the username row
usernameLabel = new JLabel("Username: ");
usernameInputField = new JTextField(50);
// The password row
passwordLabel = new JLabel("Password: ");
passwordInputField = new JPasswordField(150);
JPanel form = new JPanel();
form.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(0,20,0,0);
form.add(usernameLabel, c);
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(0,20,0,0);
form.add(passwordLabel, c);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 0;
c.weightx = 0.1;
c.ipadx = 200;
form.add(usernameInputField, c);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx = 0.001;
c.weightx = 0.001;
c.ipadx = 200;
form.add(passwordInputField, c);
// The message label, the text depends on the query's result.
message = new JLabel();
// Configuring the submit button
submit = new JButton("Sign in");
submit.addActionListener(new LoginActionListener());
submit.setActionCommand("login");
// Configuring the redirecting button
registerRedirect.setActionCommand("registerRedirect");
registerRedirect.addActionListener(new Router());
JPanel submitContainer = new JPanel();
submitContainer.setLayout(new FlowLayout(FlowLayout.RIGHT, PADDING, PADDING));
submitContainer.add(submit);
form.setMaximumSize(new Dimension(200, passwordInputField.getHeight()));
// adding everything to the layout
add(titleContainer, BorderLayout.PAGE_START);
add(form);
add(submitContainer, BorderLayout.PAGE_END);
主要
package GUI;
import javax.swing.*;
import GUI.pages.LoginPanel;
public class Main extends JFrame
public final static int WINDOW_WIDTH = 750;
public final static int WINDOW_HEIGHT = 550;
public static void main(String[] args)
JFrame frame = new Main();
public Main()
JPanel login_panel = new LoginPanel();
add(login_panel);
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
这就是我想要的样子(更新):
REM(the title)
________________________________
__________________
Username: [__________________]
__________________
Password: [__________________]
[Submit button]
【问题讨论】:
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。 【参考方案1】:我不清楚提交按钮是右对齐还是居中,但是..
蓝色区域:BorderLayout
。
红色区域:GridBagLayout
- 标签右对齐,文本字段左对齐。在边框布局的CENTER
中。
绿色区域:FlowLayout
与 PAGE_START
左对齐和 PAGE_END
居中对齐或右对齐(根据需要)。
【讨论】:
“按钮右对齐” 嗯嗯..那么,你排序了吗? 你看过API documentation for flow layout吗?文档应该是您首先查看的地方。流布局的构造函数将是一个很好的起点。 在minimal reproducible example 的表单中显示您对问题的尝试作为edit。听起来好像代码在添加组件时没有使用PAGE_START
和PAGE_END
的约束。
“我已经更新了。”回去再读一遍MRE文档。还可以阅读Short, Self Contained, Correct Example 上的页面。更长的页面谈论同样的事情,但更详细。上面发布的内容既不是第一个的 R 也不是第二个的 SC。
如果在编辑中看到的代码被复制/粘贴到您的 IDE 中的新项目中,它是否可以干净地编译而没有更改(包括 IDE 自动添加导入语句)?它运行吗?代码需要导入和 main 方法才能将其显示在屏幕上。 MRE / SSCCE 的想法之一是使其易于测试。在这里提供免费帮助的人时间有限,解决问题只有“学术兴趣”。如果有很多人提出问题,我们会专注于那些让我们更容易提供帮助的人!以上是关于Java Swing 登录表单的主要内容,如果未能解决你的问题,请参考以下文章