加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用GridBagLayout Manager将页面右上角的组件对齐

发布时间:2020-12-15 04:10:32 所属栏目:Java 来源:网络整理
导读:我正在尝试创建一个像facebook一样的登录页面,但我写的代码并没有在左上角显示它而是显示在页面的中心,我使用GridBagLayout和anchore在FIRST_LINE_END设置文本. final JFrame f2=new JFrame("Admin Main"); f2.setSize(1350,730); f2.setVisible(true); f1.s
我正在尝试创建一个像facebook一样的登录页面,但我写的代码并没有在左上角显示它而是显示在页面的中心,我使用GridBagLayout和anchore在FIRST_LINE_END设置文本.

final JFrame f2=new JFrame("Admin Main");
                    f2.setSize(1350,730);
                    f2.setVisible(true);
                    f1.setVisible(false);
                    f2.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);![enter image description here][2]
                    GridBagLayout gbl=new GridBagLayout();
                    final JPanel p2=new JPanel(gbl){
        private Image img = ImageIO.read(new File("F:Untitled FolderRohanfootball2.jpg"));
        @Override
                          protected void paintComponent( Graphics g ) { 
              super.paintComponent(g);

              g.drawImage(img,1366,730,null);
              }
       };;
                    GridBagConstraints g2=new GridBagConstraints();
                    g2.insets=new Insets(3,3,3);
                    JLabel l2=new JLabel("Admin ID",JLabel.LEFT);
                    JLabel l3=new JLabel("Password",JLabel.LEFT);
                    l2.setFont(new Font("TimesRoman",Font.BOLD,16));
                    l2.setForeground(Color.BLUE);
                    l2.setBackground(Color.WHITE);
                    l3.setFont(new Font("TimesRoman",16));
                    l3.setForeground(Color.BLUE);
                    l3.setBackground(Color.WHITE);
                    final JTextField t1=new JTextField(15);
                    final JPasswordField pw1=new JPasswordField(15);
                    JButton b3=new JButton("Back");
                    JButton b4=new JButton("Sign in");
                    f2.add(p2);
                    g2.anchor=GridBagConstraints.FIRST_LINE_END;
                    g2.gridx=1;
                    g2.gridy=1;
                    p2.add(l2,g2);
                    g2.gridx=2;
                    g2.gridy=1;
                    p2.add(t1,g2);
                    g2.gridx=1;
                    g2.gridy=2;
                    p2.add(l3,g2);
                    g2.gridx=2;
                    g2.gridy=2;
                    p2.add(pw1,g2);
                    g2.gridx=1;
                    g2.gridy=3;
                    p2.add(b3,g2);
                    g2.gridx=2;
                    g2.gridy=3;
                    p2.add(b4,g2);

解决方法

我在你当前的布局中看到两个问题:

>您将登录面板放在父BorderLayout的中心(这样您的面板就会拉伸到其容器的大小)
> GridBagLayout中没有任何内容可以将组件“推”到顶部和左侧.

这里有几个选项:

>您将登录面板嵌套到多个面板中(例如,使用BorderLayout,一次使用约束NORTH,第二次使用约束WEST).
>将您的loginPanel添加到WEST,并在GridBagLayout的底部添加“填充”组件,以便将其他组件推送到顶部.

以下是第二个解决方案的演示:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestLoginGridBagLayout {

    protected void initUI() throws MalformedURLException {
        JFrame frame = new JFrame("Admin Main");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        JLabel background = new JLabel(new ImageIcon(new URL(
                "http://media1.santabanta.com/full1/Football/Football%20Abstract/football-abstract-6a.jpg"))) {
            @Override
            public Dimension getPreferredSize() {
                Dimension preferredSize = super.getPreferredSize();
                Dimension layoutPreferredSize = super.preferredSize();
                preferredSize.width = Math.max(preferredSize.width,layoutPreferredSize.width);
                preferredSize.height = Math.max(preferredSize.height,layoutPreferredSize.height);
                return preferredSize;
            }
        };
        background.setLayout(new BorderLayout());
        frame.add(background);
        GridBagLayout gbl = new GridBagLayout();
        final JPanel loginPanel = new JPanel(gbl);
        loginPanel.setOpaque(false);
        background.add(loginPanel,BorderLayout.WEST);
        JLabel adminIDLabel = new JLabel("Admin ID",JLabel.LEFT);
        JLabel passwordLabel = new JLabel("Password",JLabel.LEFT);
        adminIDLabel.setFont(new Font("TimesRoman",16));
        adminIDLabel.setForeground(Color.BLUE);
        adminIDLabel.setBackground(Color.WHITE);
        passwordLabel.setFont(new Font("TimesRoman",16));
        passwordLabel.setForeground(Color.BLUE);
        passwordLabel.setBackground(Color.WHITE);
        final JTextField adminID = new JTextField(15);
        final JPasswordField password = new JPasswordField(15);
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
        buttonPanel.setOpaque(false);
        JButton back = new JButton("Back");
        JButton signIn = new JButton("Sign in");
        buttonPanel.add(back);
        buttonPanel.add(signIn);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(3,3);
        gbc.anchor = GridBagConstraints.FIRST_LINE_END;
        loginPanel.add(adminIDLabel,gbc);
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        loginPanel.add(adminID,gbc);
        gbc.gridwidth = 1;
        loginPanel.add(passwordLabel,gbc);
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        loginPanel.add(password,gbc);
        loginPanel.add(buttonPanel,gbc);
        GridBagConstraints gbcFiller = new GridBagConstraints();
        gbcFiller.weightx = 1.0;
        gbcFiller.weighty = 1.0;
        gbcFiller.fill = GridBagConstraints.BOTH;
        loginPanel.add(Box.createGlue(),gbcFiller);
        frame.pack();
        frame.setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new TestLoginGridBagLayout().initUI();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

}

我也冒昧地:

>将变量重命名为有意义的名称(它使您的代码更容易为其他人阅读)>用JLabel替换自定义背景图像面板>使用另一个LayoutManager将按钮移动到嵌套面板>拍摄另一张背景图片,因为我没有你的照片.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读