Munkeeface
Munkeeface

Reputation: 409

Is there a way to implement classes from a file into a new file?

I have a program that is an extremely basic login:

import javax.swing.JOptionPane.*;
import java.lang.Math.*;
import java.lang.System.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.JFrame;

public class UserLog extends JFrame  

{

public static void main(String[]Args) throws InterruptedException 
    {
    boolean isValid=false;
    while(!isValid)
        {
    // Components related to "login" field    
    JLabel label_loginname = new JLabel("Enter your login name:");    
    JTextField loginname = new JTextField(15);    
    // loginname.setText("EnterLoginNameHere"); 
    // Pre-set some text    
    // Components related to "password" field    
    JLabel label_password = new JLabel("Enter your password:");    
    JPasswordField password = new JPasswordField();    
    // password.setEchoChar('@'); 
    // Sets @ as masking character    
    // password.setEchoChar('\000'); 
    // Turns off masking    
    JCheckBox rememberCB = new JCheckBox("Remember me");

    Object[] array = {label_loginname,
    loginname,                       
    label_password,                       
    password,                       
    rememberCB};
    Object[] options = {"Login", "Cancel"};
    int res = JOptionPane.showOptionDialog(null,
                                            array,
                                            "Login",
                                            JOptionPane.YES_NO_OPTION,
                                            JOptionPane.QUESTION_MESSAGE,
                                            null,     //do not use a custom Icon
                                            options,  //the titles of buttons
                                            options[0]); //default button title

    // User hit Login    
    if (res == 0) 
        { 
            System.out.println( "Login" ); 
        }    
    // User hit CANCEL    
    if (res == 1) 
        { 
            System.out.println( "Canceled" ); 
        }    
    // User closed the window without hitting any button    
    if (res == JOptionPane.CLOSED_OPTION) 
        { 
            System.out.println( "CLOSED_OPTION" ); 
        }


    // Output data in "login" field, if any    
    String newloginname = loginname.getText();    
    String newpassword = new String(password.getPassword());    
    if (newloginname.equalsIgnoreCase("Cody_Coulter") && newpassword.equals("cheche1"))
        {
            System.out.println("Login Successful!");
            boolean selectedCB = rememberCB.isSelected();    
            System.out.println( "selectedCB: " + selectedCB );
            Thread.sleep(3000);
            Object[] array1= {"It's about time to choose"};
            Object[] options1= {"Leave", "Keep Going"};
            int res1 = JOptionPane.showOptionDialog(null,
                                            array1,
                                            "There",
                                            JOptionPane.YES_NO_OPTION,
                                            JOptionPane.QUESTION_MESSAGE,
                                            null,     //do not use a custom Icon
                                            options1,  //the titles of buttons
                                            options1[0]); //default button title
            if(res1==1)
                {
                    Object[] options2 = {"Answers for Algebra", 
                                         "Answers for APUSH",
                                         "Answers for Computer Science"};
                    Object[] array2={"Pick Your Poison:"};
                    int res2= JOptionPane.showOptionDialog(null,
                                                array2,
                                                "This",
                                                JOptionPane.YES_NO_OPTION,
                                                JOptionPane.QUESTION_MESSAGE,
                                                null,     //do not use a custom Icon
                                                options2,  //the titles of buttons
                                                options2[0]); //default button title
                    if (res2 == 0) 
                    { 
                        JOptionPane.showMessageDialog(null, "Nigguh you a cheatuh" ); 
                    }    
                    else
                    if (res2 == 1) 
                    { 
                        JOptionPane.showMessageDialog(null, "Nigguh, who's dumb enough to need to cheat in APUSH" ); 
                    }
                    else
                    if (res2 == 2) 
                    { 
                        JOptionPane.showMessageDialog(null, "Nigguh, you dumb" ); 
                    }     

                    String name1 = JOptionPane.showInputDialog(null,
                                                        "What is your name?");
                    int length = 0;
                    length = newpassword.length();
                    String Pass = "*";
                    newpassword =newpassword.replaceAll(".","*");
                    System.out.println("Username: "+newloginname+"\nPassword: "+
                                        newpassword+"\nName: "+name1);
                }

        }
    else {
            JOptionPane.showMessageDialog(null,"Wrong Username or Password!");
            isValid=false;
         }

        }
    // Output data in "password" field, if any    
    // Output state of "remember me" check box    

    }

}

What I want to do is create another program, such as a fileshare, file access, or even a basic game but be able to have this login implemented in order to, of course, login. Is there a way to implement this code without having to copy and paste into another code as a separate class within that file? Example:

public class NewGame{
     public static void main(String[] args)
     {
         new UserLog();
     }

of course this may not be syntactually correct, but that's the gist of it.

Thank you, and if I need to rephrase it or edit the question/format, let me know! :)

EDIT After making the current main method a regular public class, and call from the newly public class, by the new main

public class gameLogin
{
public static void main(String[]args) 
{ 
    userLogin(); 
} 
public class userLogin() 
{ 
   // current code, evidently seen in the current main  
}
// rest of code

So in order to reference to the original file, userLog, I would have to (in the new file: gameLogin) use userLog();

or would it be better to use

userLog.userLogin("Munkeeface", "password");

Upvotes: 1

Views: 73

Answers (3)

aliteralmind
aliteralmind

Reputation: 20163

The simplest method would be to simply move all code from your main into a static utility-class function, and then call that function from your other classes mains. For example:

public class LoginToWebsiteUtil  {
   public static final void login(String username, String password, ...)  {
      //CODE GOES HERE
   }
}

And use it with:

public class LoginToMyWebsite  {
   public static final void main(String[] ignored)  {
      LoginToWebsiteUtil.login("myname", "password", ...)
   }
}          

The only tricky thing will be answering the question: "what variables save state?" Those variables must be declared as static class fields in the utility class. This is because, as soon as the function ends, all state, such as the login-connection, will be terminated. In order to keep it around ("hold its state"), these state variables need to have a larger scope than just the lifetime of the function.

For example, instead of

public class LoginToWebsiteUtil  {
   public static final void login(String username, String password, ...)  {
      Connection conn = getConnectionFromLogin(username, password);

      //and so on...

It will have to be

public class LoginToWebsiteUtil  {
   private static Connection conn = null;
   public static final void login(String username, String password, ...)  {
      conn = getConnectionFromLogin(username, password);

      //and so on...

Alternatively, you could put all the code from your original main function into the constructor of a new class, such as

public class UserLogin  {
   private static Connection conn = null;
   public UserLog(String username, String password, ...)  {
      conn = getConnectionFromLogin(username, password);
      //CODE HERE
   }
}

But, as you can see, you still have the "what holds state?" issue.

(This is a good problem. It sounds like this login code is potentially useful in the future for you.)

Upvotes: 1

wolfrevo
wolfrevo

Reputation: 7303

From your code the first step (although not the best one) could be:

public class NewGame{
     public static void main(String[] args) {
         UserLog.main();
     }

Better if you change the signature of your UserLog.main() method to have a non-static method of UserLog, e.g.

public class UserLog extends JFrame {
    public void newMethod(String[] args) throws InterruptedException {
       // your code in old main method
    }
}

and use this method from another class as follows:

public class NewGame {
    public static void main(String[] args) {
        UserLog userLog = new UserLog;
        userLog.newMethod(args);
    }
}

If you don't pass any arguments to newMethod you can remove the params String[] args in the method definition and in the call userLog.newMethod()

Upvotes: 0

lolwel21
lolwel21

Reputation: 67

Use a public method in the login class that returns whether the user has logged in or not. In the class that calls it use userLog log=new userLog(), then repeatedly call the method. If it returns true, then the user has successfully logged in.

Upvotes: 0

Related Questions