我想设计一个简单的表单,有5个组件:
2个标签、1个测试字段、1个密码文本字段和1个按钮。我想有一个标签,并在它的右边的文本字段。
向下一行(或者更多,应该可以看到漂亮的空格)我想要第二个标签,密码文本字段在它的右边。
在下面的第三行,中间,我想要这个按钮。
我试图在没有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);
}
}发布于 2014-02-12 00:16:33
我会继续使用WindowBuilder或其他可视化图形用户界面构建器来进行初始布局。然后,您可以检查生成的代码,并使用它来查看它是如何工作的。
我不太使用GroupLayout,但我更喜欢GridBagLayout。GridBag一开始令人困惑,但一旦你掌握了它的诀窍,它就不会太糟糕了。如果你使用相对定位而不是绝对定位,你的布局将更容易维护。
MiGLayout是另一个很好的布局,它比GridBagLayout更容易上手,但它也不完美(至少,我上一次使用它不是在几年前)。当我用它手动布置更复杂的面板时,它至少和GridBagLayout一样冗长。
如果你想手动调整布局,WindowBuilder实际上非常适合让你在所见即所得编辑和手工编码之间切换。将一个可以正常工作的GUI版本提交到存储库(git、mercurial、cvs、svn等)也不会有什么坏处。在你开始手动调整它之前,只是以防万一,这样你就可以很容易地将修改后的代码与原始代码进行比较。(如果您还没有使用版本控制系统,请立即开始使用。如果我必须推荐一个,我会说使用git,但任何分布式版本控制系统都会比您现在正在做的更好,并且一个与您的IDE和/或工作流的其他部分良好集成的系统将为您节省更多的时间和挫折。)
请记住,有时使用嵌套布局很有用;您不必只使用一种布局。
发布于 2014-02-11 23:58:39
你基本上有一个3x2的网格,在其中的四个单元格中,你正在显示一些东西。第五个元素延伸到两个单元格中。
我将使用Gridbaglayout来定位这五个元素。通过谨慎使用GridBaylayoutConstraints,您可以调整组件的拉伸行为。即。文本字段应拉伸最大值。并且标签不应该有拉伸。
我还会在添加组件时为所有组件添加统一的insets (最好是在所有方向上都是5px )。
这里有一个教程:http://blue-walrus.com/2011/12/gridbaglayout-tutorial/
发布于 2014-02-12 05:07:12
与其他标准LayoutManagers相比,GridBagLayout确实有一个陡峭的学习曲线,但是一旦你掌握了它的诀窍,在几分钟内就可以很容易地手工编写这样的图形用户界面:
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。
https://stackoverflow.com/questions/21704278
复制相似问题