【问题标题】:Java JLabel and JTextField PositioningJava JLabel 和 JTextField 定位
【发布时间】:2016-10-14 05:50:32
【问题描述】:

现在我有一个“登录”JFrame 设置。用户名和密码有 2 个标签和 2 个字段。它们居中并如下所示:

username: |text field|
password: |text field|

JPanel loginLabel = new JPanel(new GridLayout(0, 1, 0, 10));
        loginLabel.add(usernameLabel);
        loginLabel.add(passwordLabel);
        loginLabel.setBackground(new Color(82,80,80));

        JPanel loginField = new JPanel(new GridLayout(0, 1, 0, 10));
        loginField.add(usernameField);
        loginField.add(passwordField);
        loginField.setBackground(new Color(82,80,80));

        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        buttonPanel.add(createButton);
        buttonPanel.add(loginButton);
        buttonPanel.add(quitButton);
        buttonPanel.setBackground(new Color(82,80,80));

        setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        setBackground(new Color(82,80,80));
        add(loginLabel, BorderLayout.CENTER);
        add(loginField, BorderLayout.LINE_END);
        add(buttonPanel, BorderLayout.SOUTH);

我正在尝试使所有标签和字段都居中,但它们看起来像这样:

  Username
|Text Field|

  Password
|Text Field|

有人可以帮忙吗?

【问题讨论】:

  • 您可以将密码和用户名放在一个面板中,然后您可以将面板的布局设置为BorderLayout。这样做您可以放置​​用户名NORTH和密码SOUTH,然后将这两个添加到你的 JFrame。
  • 如需尽快获得更好的帮助,请发帖minimal reproducible exampleShort, Self Contained, Correct Example
  • 顺便说一句-我的处理方式:1)使用JPasswordField作为密码,2)在单个面板中显示GridBagLayout中的两个标签以及文本和密码字段. 3) 在JOptionPane 中显示该面板,该面板已经具有在用户名/密码字段下方提供所需按钮的功能。

标签: java swing layout jframe layout-manager


【解决方案1】:

你可以尝试使用 setBounds(x,y,length,heigth) 并且你必须 setLayout(null)

【讨论】:

    【解决方案2】:

    既不要使用GridLayout,也不要使用FlowLayout。他们一无是处。我推荐GroupLayoutMigLayout

    我使用内置的GroupLayout 管理器创建了一个解决方案。它是一个现代且灵活的布局管理器。

    package com.zetcode;
    
    import java.awt.Container;
    import java.awt.EventQueue;
    import javax.swing.GroupLayout;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import static javax.swing.JFrame.EXIT_ON_CLOSE;
    import javax.swing.JLabel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    public class GroupLayoutPasswordEx extends JFrame {
    
        public GroupLayoutPasswordEx() {
    
            initUI();
        }
    
        private void initUI() {
    
            JLabel userLabel = new JLabel("User");
            JTextField userField = new JTextField();
    
            JLabel pswdLabel = new JLabel("Password");
            JPasswordField pswdField = new JPasswordField();
    
            createLayout(userLabel, userField, pswdLabel, pswdField);
    
            setTitle("Login");
            setSize(300, 200);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    
        private void createLayout(JComponent... arg) {
    
            Container pane = getContentPane();
            GroupLayout gl = new GroupLayout(pane);
            pane.setLayout(gl);
    
            gl.setAutoCreateContainerGaps(true);
            gl.setAutoCreateGaps(true);
    
            gl.setHorizontalGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)
                    .addComponent(arg[0])
                    .addComponent(arg[1])
                    .addComponent(arg[2])
                    .addComponent(arg[3])
            );
    
            gl.setVerticalGroup(gl.createSequentialGroup()
                    .addComponent(arg[0])
                    .addComponent(arg[1], GroupLayout.DEFAULT_SIZE, 
                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(arg[2])
                    .addComponent(arg[3], GroupLayout.DEFAULT_SIZE, 
                            GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            );
        }    
    
    
        public static void main(String[] args) {
            EventQueue.invokeLater(() -> {
                GroupLayoutPasswordEx ex = new GroupLayoutPasswordEx();
                ex.setVisible(true);
            });
        }
    }
    

    一旦你在这个经理身上投入了一些时间,这并不难。 这是截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-17
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2011-07-07
      • 2013-10-04
      相关资源
      最近更新 更多