Java 使用哪种布局以及如何使用?

Java 使用哪种布局以及如何使用?,java,swing,layout,Java,Swing,Layout,我想设计一个简单的表单,包含5个组件: 2个标签、1个测试字段、1个密码文本字段和1个按钮。我想有一个标签,并在它的右边的文本字段 向下一行(或者多行,应该看到一个漂亮的空格)我想要第二个标签,右边是passwordtextfield 在下面的第三行中,在中间,我想要这个按钮。< /P> 我试图在没有WindowsBuilder或任何辅助工具的情况下完成这项工作,但是,我是Java的新手 package HR; import javax.swing.JFrame; import javax.s

我想设计一个简单的表单,包含5个组件:

2个标签、1个测试字段、1个密码文本字段和1个按钮。我想有一个标签,并在它的右边的文本字段

向下一行(或者多行,应该看到一个漂亮的空格)我想要第二个标签,右边是passwordtextfield

在下面的第三行中,在中间,我想要这个按钮。< /P> 我试图在没有WindowsBuilder或任何辅助工具的情况下完成这项工作,但是,我是Java的新手

package HR;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JFormattedTextField;
import javax.swing.JButton;

import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class SignIn extends JFrame
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public SignIn()
    {
        this.setTitle("HR SYSTEM LOGIN SCREEN");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(100, 100, 308, 179);
        JPanel contentPane = new JPanel();
        this.getContentPane().add(contentPane);

        JLabel userName = new JLabel("User Name");
        contentPane.add(userName);

        JLabel password = new JLabel("Password");
        contentPane.add(password);

        JFormattedTextField userText = new JFormattedTextField();
        contentPane.add(userText);

        JPasswordField passwordText = new JPasswordField();
        contentPane.add(passwordText);

        JButton signButton = new JButton("Sign In");
        contentPane.add(signButton);



    }

}

要像你希望的那样放置你所有的东西,我将使用gridbaglayout。 但这很复杂,也不容易处理, 因此,在您的情况下,正常的网格布局就足够了


要像你希望的那样放置所有东西,我将使用gridbaglayout。 但这很复杂,也不容易处理, 因此,在您的情况下,正常的网格布局就足够了


对于WindowsBuilder,我会使用(标准API),(第三方)或(第三方)。所有这些都得到了很好的支持,可以做你想做的事情。如果您计划手工编写UI代码(为什么?),MigLayout是一个不错的选择

WindowsBuilder文档和优点:

  • :非常灵活的布局管理器,专为GUI构建者设计。swing开发的一个流行组合是和GroupLayout(但WindowsBuilder也做得很好)。作为一名Java开发人员,在WindowsBuilderPro被谷歌收购并免费发布之前,我曾经打开一个Netbeans窗口来构建UI:)。布局使用分层组加上大小调整和锚定策略,与Delphi中的工作方式非常相似
  • :自从第一次发布以来已经走了很长一段路。获得“Java最通用、最灵活的Swing和SWT布局管理器”的称号(引用WindowsBuilder文档)。它易于与GUI生成器一起使用或手动使用。使用字符串常量或API检查的约束
  • :曾经是建造摇摆模板的非官方标准。它是一个灵活而精确的UI管理器,可以与结合使用,以获得非常好的跨平台体验。它也可以手动使用,但与智能GUI编辑器(如WindowsBuilder也可以)结合使用时,它确实非常出色。它使用带有字符串描述和组件生成器的网格布局系统,使一切变得简单明了
我个人的看法是:

我是新来的!我不知道该用什么:使用GroupLayout,它是标准的,不需要第三方jar文件。只需克服手动编辑UI代码的冲动(严肃地说!)

但是我想手工编辑UI代码:好的,使用MigLayout,好的组件,很多易于掌握的字符串常量


当我在不同的操作系统中打开应用程序时,UI没有正确呈现。:使用JGoodies组合并遵循开发指南,同时遵循UI生成器提示,在任何地方添加间隙、额外的空白和约束。在您的计算机中,这看起来可能是一种浪费,但一旦您使用不同的DPI字体处理运行不同桌面环境的不同操作系统,UI仍然可以使用,因为您需要付出额外的努力

对于WindowsBuilder,我将使用(标准API),(第三方)或(第三方)。所有这些都得到了很好的支持,可以做你想做的事情。如果您计划手工编写UI代码(为什么?),MigLayout是一个不错的选择

WindowsBuilder文档和优点:

  • :非常灵活的布局管理器,专为GUI构建者设计。swing开发的一个流行组合是和GroupLayout(但WindowsBuilder也做得很好)。作为一名Java开发人员,在WindowsBuilderPro被谷歌收购并免费发布之前,我曾经打开一个Netbeans窗口来构建UI:)。布局使用分层组加上大小调整和锚定策略,与Delphi中的工作方式非常相似
  • :自从第一次发布以来已经走了很长一段路。获得“Java最通用、最灵活的Swing和SWT布局管理器”的称号(引用WindowsBuilder文档)。它易于与GUI生成器一起使用或手动使用。使用字符串常量或API检查的约束
  • :曾经是建造摇摆模板的非官方标准。它是一个灵活而精确的UI管理器,可以与结合使用,以获得非常好的跨平台体验。它也可以手动使用,但与智能GUI编辑器(如WindowsBuilder也可以)结合使用时,它确实非常出色。它使用带有字符串描述和组件生成器的网格布局系统,使一切变得简单明了
我个人的看法是:

我是新来的!我不知道该用什么:使用GroupLayout,它是标准的,不需要第三方jar文件。只需克服手动编辑UI代码的冲动(严肃地说!)

但是我想手工编辑UI代码:好的,使用MigLayout,好的组件,很多易于掌握的字符串常量


当我在不同的操作系统中打开应用程序时,UI没有正确呈现。:使用JGoodies组合并遵循开发指南,同时遵循UI生成器提示,在任何地方添加间隙、额外的空白和约束。在您的计算机中,这看起来可能是一种浪费,但一旦您使用不同的DPI字体处理运行不同桌面环境的不同操作系统,UI仍然可以使用,因为您需要付出额外的努力

基本上你有一个3 x 2的网格,在其中的四个单元格中你显示了一些东西。第五个元素横跨两个单元格

我将使用Gridbaglayout来定位这五个元素。通过仔细使用GridBaylayoutConstraints,可以调整零部件的拉伸行为。即,文本字段应最大拉伸,标签应无拉伸

我还要加上制服
package swing;

import java.awt.*;
import javax.swing.*;

public class LoginWithGridBagDemo implements Runnable
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new LoginWithGridBagDemo());
  }

  public void run()
  {
    JLabel userLabel = new JLabel("User Name");
    JLabel passLabel = new JLabel("Password");
    JTextField userText = new JTextField(20);
    JPasswordField passText = new JPasswordField(20);
    JButton loginButton = new JButton("Login");

    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    gbc.insets = new Insets(4,4,4,4);
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.NONE;
    panel.add(userLabel, gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    panel.add(userText, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.fill = GridBagConstraints.NONE;
    panel.add(passLabel, gbc);

    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    panel.add(passText, gbc);

    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.fill = GridBagConstraints.NONE;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.gridwidth = 2;
    panel.add(loginButton, gbc);

    JFrame f = new JFrame("Login");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new JScrollPane(panel));
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}