首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用哪种布局以及如何使用?

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

Stack Overflow用户
提问于 2014-02-11 22:14:19
回答 4查看 509关注 0票数 1

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

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

向下一行(或者更多,应该可以看到漂亮的空格)我想要第二个标签,密码文本字段在它的右边。

在下面的第三行,中间,我想要这个按钮。

我试图在没有WindowsBuilder或任何辅助工具的情况下做到这一点,然而,我是一个Java新手。

代码语言:javascript
运行
复制
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);



    }

}
EN

回答 4

Stack Overflow用户

发布于 2014-02-12 00:16:33

我会继续使用WindowBuilder或其他可视化图形用户界面构建器来进行初始布局。然后,您可以检查生成的代码,并使用它来查看它是如何工作的。

我不太使用GroupLayout,但我更喜欢GridBagLayout。GridBag一开始令人困惑,但一旦你掌握了它的诀窍,它就不会太糟糕了。如果你使用相对定位而不是绝对定位,你的布局将更容易维护。

MiGLayout是另一个很好的布局,它比GridBagLayout更容易上手,但它也不完美(至少,我上一次使用它不是在几年前)。当我用它手动布置更复杂的面板时,它至少和GridBagLayout一样冗长。

如果你想手动调整布局,WindowBuilder实际上非常适合让你在所见即所得编辑和手工编码之间切换。将一个可以正常工作的GUI版本提交到存储库(git、mercurial、cvs、svn等)也不会有什么坏处。在你开始手动调整它之前,只是以防万一,这样你就可以很容易地将修改后的代码与原始代码进行比较。(如果您还没有使用版本控制系统,请立即开始使用。如果我必须推荐一个,我会说使用git,但任何分布式版本控制系统都会比您现在正在做的更好,并且一个与您的IDE和/或工作流的其他部分良好集成的系统将为您节省更多的时间和挫折。)

请记住,有时使用嵌套布局很有用;您不必只使用一种布局。

票数 2
EN

Stack Overflow用户

发布于 2014-02-11 23:58:39

你基本上有一个3x2的网格,在其中的四个单元格中,你正在显示一些东西。第五个元素延伸到两个单元格中。

我将使用Gridbaglayout来定位这五个元素。通过谨慎使用GridBaylayoutConstraints,您可以调整组件的拉伸行为。即。文本字段应拉伸最大值。并且标签不应该有拉伸。

我还会在添加组件时为所有组件添加统一的insets (最好是在所有方向上都是5px )。

这里有一个教程:http://blue-walrus.com/2011/12/gridbaglayout-tutorial/

票数 1
EN

Stack Overflow用户

发布于 2014-02-12 05:07:12

与其他标准LayoutManagers相比,GridBagLayout确实有一个陡峭的学习曲线,但是一旦你掌握了它的诀窍,在几分钟内就可以很容易地手工编写这样的图形用户界面:

代码语言:javascript
运行
复制
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);
  }
}

此外,任何经常使用GridBagLayout的人最终都会编写帮助器方法/类,这些方法/类可以简化上面的代码,并使图形用户界面生成更加简单。对于那些感兴趣的人,here's a post向你展示了我做了什么让我的GBL生活变得更容易。

不要沉迷于仇恨。这是一个非常强大的LayoutManager。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21704278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档