本文介绍了哪个布局管理器适合我的设计?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Java的初学者.我希望在Swings中获得一些帮助来定位我的组件.

I am a beginner to Java. I would like some help in Swings to position my components.

我无法决定应使用哪个布局管理器按以下顺序放置组件

I am not able to decide as which layout manager should I use to position my components in the following order

+-----------------------------------+
|                                   |
|      Username  Text Field         |
|      Password  Password Field     |
|                                   |
|           Submit button           |
|                                   |
+-----------------------------------+

以下是我的代码

    package ssst;

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

import javax.swing.*;

class Test implements ActionListener{



    JButton submit;
    JFrame j;
    JFrame jf;

    public Test()
    {
    j = new JFrame("PLAIN");
    j.setBounds(500,150,300,400);

    JPanel panel = new JPanel();
    j.add(panel);
    GridBagLayout gb = new GridBagLayout();
    panel.setLayout(gb);


    GridBagConstraints c = new GridBagConstraints();



    JLabel label = new JLabel("User Name");
    c.gridx=0;
    c.gridy=0;
    c.fill=GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.WEST;
    c.ipadx=5;
    c.ipady=5;
    c.insets= new Insets(7,7,7,7);

    panel.add(label,c);

    JTextField username = new JTextField(10);

    c.gridx=1;
    c.gridy=0;

    c.fill=GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.WEST;
    c.ipadx=5;
    c.insets= new Insets(7,7,7,7);

    panel.add(username,c);

    JLabel password= new JLabel("Password");
    c.gridx=0;
    c.gridy=1;
    c.fill=GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.WEST;
    c.ipadx=5;
    c.insets= new Insets(7,7,7,7);

    panel.add(password,c);

    JPasswordField pass = new JPasswordField(10);
    c.gridx=1;
    c.gridy=1;
    c.fill=GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.WEST;
    c.insets= new Insets(7,7,7,7);

    panel.add(pass,c);

    submit = new JButton("Submit");
    c.gridx=1;
    c.gridy=6;
    c.fill=GridBagConstraints.HORIZONTAL;
    c.anchor=GridBagConstraints.WEST;
    c.insets= new Insets(7,7,7,7);

    panel.add(submit,c);

    submit.addActionListener(this);
    j.setVisible(true);
    j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }


    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        j.setVisible(false);
        jf = new JFrame("NEw Window");
        jf.setVisible(true);
        jf.setBounds(500,150,300,400);
        JPanel panel2 = new JPanel();
        panel2.setLayout(null);
        jf.add(panel2);

        JButton logout = new JButton("LOGOUT");
        logout.setBounds(100, 30, 400, 30);
        panel2.add(logout);
        logout.addActionListener(new Test2());
        jf.setDefaultCloseOperation(j.EXIT_ON_CLOSE);



    }


    class Test2 implements ActionListener{
        public void actionPerformed(ActionEvent e) {

            jf.dispose();
            j.setVisible(true);

        }


    }


public static void main(String args[])
{
    SwingUtilities.invokeLater(new Runnable()
    {
            public void run()
            {

                new Test();

            }

    }

            );


}




}

推荐答案

您可以使用GridBagLayoutJOptionPane

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LoginPane extends JPanel {

    private JTextField userName;
    private JPasswordField password;

    public LoginPane() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.EAST;
        gbc.insets = new Insets(4, 4, 4, 4);
        add(new JLabel("Username:"), gbc);
        gbc.gridy++;
        add(new JLabel("Password:"), gbc);

        userName = new JTextField(10);
        password = new JPasswordField(10);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        add(userName, gbc);
        gbc.gridy++;
        add(password, gbc);
    }

    public String getUsername() {
        return userName.getText();
    }

    public char[] getPassword() {
        return password.getPassword();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                LoginPane loginPane = new LoginPane();
                int option = JOptionPane.showOptionDialog(
                        null,
                        loginPane,
                        "Login",
                        JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.PLAIN_MESSAGE,
                        null,
                        new Object[]{"Submit"},
                        "Submit");
                if (option == 0) {
                    System.out.println("Happy");
                }

            }
        });
    }
}

您也可以在这个概念上使用GridLayout.

You could possibly use GridLayout with this concept as well.

看看 http://docs.oracle.com /javase/tutorial/uiswing/layout/visual.html 了解更多想法并链接到其他布局管理器

Take a look at http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html for more ideas and links to other layout managers

这篇关于哪个布局管理器适合我的设计?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-17 16:59