如何用Java登录

时间:2014-09-25 18:08:08

标签: java jframe joptionpane jdialog

我的程序检查并确保您键入的密码正确无误。如果密码正确,则转到下一个窗口。如果它与密码不匹配,那么它应该返回登录屏幕。我的问题是我不能回到登录界面,我希望得到一些帮助。如何使我的登录屏幕使用int输入,并在那里我有登录信息

package scanlogin;

//Imports are listed in full to show what's being used
//could just import javax.swing.* and java.awt.* etc..
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.util.Arrays;
import java.awt.EventQueue;


public class ScanScreen {

    //Note: Typically the main method will be in a
    //separate class. As this is a simple one class
    //example it's all in the one class.
    public static void main(String[] args) {

        //Use the event dispatch thread for Swing components
        EventQueue.invokeLater(new Runnable(){
            public void run(){ 
                createGuiFrame();          
            }
        });      
    }

    //handles the creation of the JFrame and
    //all it's components
    private static void createGuiFrame(){
        JFrame guiFrame = new JFrame();
        //make sure the program exits when the frame closes
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("Logging Information");
        guiFrame.setSize(1000,600);

        //This will center the JFrame in the middle of the screen
        guiFrame.setLocationRelativeTo(null);
        guiFrame.setVisible(true);

        //Using a JPanel as the message for the JOptionPane
        JPanel userPanel = new JPanel();
        userPanel.setLayout(new GridLayout(2,2));

        JLabel usernameLbl = new JLabel("Username:");
        JLabel passwordLbl = new JLabel("Password:");
        JTextField username = new JTextField();
        JPasswordField passwordFld = new JPasswordField();

        userPanel.add(usernameLbl);
        userPanel.add(username);
        userPanel.add(passwordLbl);
        userPanel.add(passwordFld);

        //As the JOptionPane accepts an object as the message
        //it allows us to use any component we like - in this case 
        //a JPanel containing the dialog components we want
        int input = JOptionPane.showConfirmDialog(guiFrame, userPanel, "Login Page",JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

        char[] correctPassword = {'R','a','T'};
        //  Retrieve password
        char[] enteredPassword = passwordFld.getPassword();

        if (input == 0){ //OK Button = 0
            if (Arrays.equals(correctPassword, enteredPassword)){
                JOptionPane.showMessageDialog(null, "Password is correct!");
            }else{
                JOptionPane.showMessageDialog(null, "Invalid username or password!");
            }

            //Note: best practice is to zero out the array
            //that contains the password. (Bit silly here
            //as I'm printing the password to show how it's retrived
            //but keep it in mind when using JPasswordFields.)
            Arrays.fill(enteredPassword, '0');
        }else{
            //either the cancel button or the 'x' 
            //has been pressed
            System.exit(0);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这只是一个如何做的例子。您的情况我会更复杂(即您需要确认其他字段等),但基本概念仍然存在

String CORRECT_PASSWORD = ...; do { String pwd = JOptionPane.showInputDialog("Enter Password"); } while (!pwd.equals(CORRECT_PASSWORD));