This is part of a project for school, and I’m stuck and need someone to bounce ideas off of. I have a game where there is an option to sign up or sign in for a machine-local game so a record can be kept of the person’s scores. The game is run from a base GUI JFrame, and I want to make buttons to bring up secondary windows for the person to sign in or sign up, before closing out of them. I need to pass the validated username back to the initial GUI/game class so I can store it for the following game so the game score can be added under that user. I just need to pass the username back and I’m not sure how to go about it. This is the main GUI code up to where I’m having my issue:
public class MathFactsGUI extends JFrame { // instance variables private JTextField problemJTextField, answerJTextField; private JLabel equalJLabel; private JButton additionJButton, multiplicationJButton; private JButton signupJButton, signinJButton; private JButton submitJButton; private JLabel scoreJLabel,resultJLabel; //private JButton reviewButton; private String username; private Userbase userbase; private JLabel introJLabel; Quiz quiz; /** * Constructor for objects of class MathFactsGUI */ public MathFactsGUI() { super("Math Facts Quiz"); userbase = Userbase.getUserbase(); username = "guest"; /* code here has been removed to be abbreviated */ // Action listener for buttons additionJButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ quiz = new Quiz('+'); problemJTextField.setText(quiz.getCurrentProblem()); additionJButton.setEnabled(false); multiplicationJButton.setEnabled(false); signupJButton.setEnabled(false); signinJButton.setEnabled(false); } }); multiplicationJButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ quiz = new Quiz('x'); problemJTextField.setText(quiz.getCurrentProblem()); additionJButton.setEnabled(false); multiplicationJButton.setEnabled(false); signupJButton.setEnabled(false); signinJButton.setEnabled(false); } }); signinJButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JDialo } }); signupJButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ MathFactsSignUpGUI signUpGUI = new MathFactsSignUpGUI(); gui.setVisible(true); } }); }
This is the JFrame
I wrote for the sign-up button:
public class MathFactsSignUpGUI extends JDialog { private JTextField usernameJTextField, userPassJTextField, userFirstNameJTextField; private JLabel usernameJLabel, userPassJLabel, userFirstNameJLabel; private JButton submitJButton; private String username; private String userPass; private String userFirstName; public MathFactsSignUpGUI(){ usernameJLabel = new JLabel("Username:"); usernameJTextField = new JTextField(); userPassJLabel = new JLabel("Password:"); userPassJTextField = new JTextField(); userFirstNameJLabel = new JLabel("Player First Name:"); userFirstNameJTextField = new JTextField(); Box usernameBox = Box.createHorizontalBox(); usernameBox.add(usernameJLabel); usernameBox.add(usernameJTextField); Box userPassBox = Box.createHorizontalBox(); userPassBox.add(userPassJLabel); userPassBox.add(userPassJTextField); Box userFirstBox = Box.createHorizontalBox(); userFirstBox.add(userFirstNameJLabel); userFirstBox.add(userFirstNameJTextField); submitJButton = new JButton("Submit"); submitJButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ username = usernameJTextField.getText(); userPass = userPassJTextField.getText(); userFirstName = userFirstNameJTextField.getText(); if (!checkValid(username) || !checkValid(userPass) || !checkValid(userFirstName)){ JOptionPane.showMessageDialog(null, "All fields must have values."); } else if (Userbase.getUserbase().userExist(username)==true){ JOptionPane.showMessageDialog(null, "Username is taken, please choose another."); } else { Userbase.getUserbase().addUser(username, new User(username, userPass, userFirstName)); MathFactsGUI.setUsername(username); } } }); JPanel mfSignUp = new JPanel() mfSignUp.setLayout(new GridLayout(0,1)); mfSignUp.add(usernameBox); mfSignUp.add(userPassBox); mfSignUp.add(userFirstBox); mfSignUp.add(submitJButton); } public String signIn(){ return username; } public boolean checkValid(String a){ if (a == null || a.length() == 0){ return false; } else { return true; } } }```
I was thinking of implementing a WindowListener
action for when the sign-up/sign-in frames close, but I’m not sure that will work. I was also looking into JDialog
, but I’m not sure if it has the layout/text verification properties I need.
Advertisement
Answer
Use a JOptionPane
. It will simplify your layout without the need for creating a separate JFrame
and easily pass values back to wherever it was called from. You can then make it check for valid username when you click OK.