如何使我的 user/pwd 验证与输出工作
How to make my user/pwd verification with output work
所以,我不知道该做什么。我需要将 input1 和 input2 设为两个单独的字段,以免混淆。任何想法,将不胜感激。它不一定是 input1/input2,但如果保持这种方式就好了。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
import javax.swing.*;
import static jdk.nashorn.tools.ShellFunctions.input;
public class JOptionPaneMultiInput {
public static void main(String[] args) throws FileNotFoundException {
Scanner keyboard = new Scanner(System.in);
String input1;
String input2;
JTextField UsernameField = new JTextField(10);
JTextField PwdField = new JTextField(10);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("Username: "));
myPanel.add(UsernameField);
myPanel.add(Box.createVerticalStrut(20)); // a spacer
myPanel.add(new JLabel("Password: "));
myPanel.add(PwdField);
input1 = (UsernameField); //<<<--- Error.
input2 = (PwdField); //<<<--- Error.
if (usernamefield(input1)) {
System.out.println("Username verified.");
} else if (pwdfield(input2)) {
System.out.println("Password verified.");
} else {
System.out.println("Error: Wrong username/password.");
}
}
private static boolean usernamefield(String user1) {
return ((user1.length() == 6)
&& (user1.matches("user"))
&& (user1.matches("user"))
&& (user1.matches("user")));
}
private static boolean pwdfield(String password1) {
return ((password1.length() == 6)
&& (password1.matches("pwd"))
&& (password1.matches("pwd"))
&& (password1.matches("pwd")));
}
}
input1 = UsernameField.getText();
input2 = PwdField.getText();
此外,您的 JPanel
应添加到 JFrame
,后者应设置为可见:
JFrame frm = new JFrame();
frm.getContentPane().add(myPanel);
frm.pack();
frm.setVisible(true);
那么你还应该添加一个JButton
来触发登录动作,而不是把它放在main()
.
我强烈建议您阅读 Java tutorial on Swing。
编辑:这里有一个 MCVE 供您将来参考:
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField tfUsername;
private JPasswordField tfPwd;
public Test() {
super();
JPanel myPanel = new JPanel();
getContentPane().add(myPanel);
myPanel.add(new JLabel("Username: "));
tfUsername = new JTextField(10);
myPanel.add(tfUsername);
myPanel.add(Box.createHorizontalStrut(20)); // a horizontal spacer
myPanel.add(new JLabel("Password: "));
tfPwd = new JPasswordField(10);
myPanel.add(tfPwd);
JButton btnLogin = new JButton("Login");
myPanel.add(btnLogin);
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
String user = tfUsername.getText();
if (usernamefield(user)) {
String pwd = tfPwd.getText(); // Deprecated (use "getPassword()" for better security, see
if (pwdfield(pwd))
JOptionPane.showMessageDialog(Test.this, "Password verified.");
else
JOptionPane.showMessageDialog(Test.this, "Error: Wrong username/password.", "Login error", JOptionPane.ERROR_MESSAGE);
} else
JOptionPane.showMessageDialog(Test.this, "Error: Unknown username.", "Login error", JOptionPane.WARNING_MESSAGE);
}
});
}
public static void main(String[] args) {
// You can do that outside of EDT (see
Test frm = new Test();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Outside of Test class so close operation is defined by the user and not the class
frm.pack();
frm.setVisible(true);
}
private static boolean usernamefield(String user) {
return "user".equals(user);
}
private static boolean pwdfield(String password) { // TODO: Change String to char[] to improve security
return "pwd".equals(password);
}
}
所以,我不知道该做什么。我需要将 input1 和 input2 设为两个单独的字段,以免混淆。任何想法,将不胜感激。它不一定是 input1/input2,但如果保持这种方式就好了。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
import javax.swing.*;
import static jdk.nashorn.tools.ShellFunctions.input;
public class JOptionPaneMultiInput {
public static void main(String[] args) throws FileNotFoundException {
Scanner keyboard = new Scanner(System.in);
String input1;
String input2;
JTextField UsernameField = new JTextField(10);
JTextField PwdField = new JTextField(10);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("Username: "));
myPanel.add(UsernameField);
myPanel.add(Box.createVerticalStrut(20)); // a spacer
myPanel.add(new JLabel("Password: "));
myPanel.add(PwdField);
input1 = (UsernameField); //<<<--- Error.
input2 = (PwdField); //<<<--- Error.
if (usernamefield(input1)) {
System.out.println("Username verified.");
} else if (pwdfield(input2)) {
System.out.println("Password verified.");
} else {
System.out.println("Error: Wrong username/password.");
}
}
private static boolean usernamefield(String user1) {
return ((user1.length() == 6)
&& (user1.matches("user"))
&& (user1.matches("user"))
&& (user1.matches("user")));
}
private static boolean pwdfield(String password1) {
return ((password1.length() == 6)
&& (password1.matches("pwd"))
&& (password1.matches("pwd"))
&& (password1.matches("pwd")));
}
}
input1 = UsernameField.getText();
input2 = PwdField.getText();
此外,您的 JPanel
应添加到 JFrame
,后者应设置为可见:
JFrame frm = new JFrame();
frm.getContentPane().add(myPanel);
frm.pack();
frm.setVisible(true);
那么你还应该添加一个JButton
来触发登录动作,而不是把它放在main()
.
我强烈建议您阅读 Java tutorial on Swing。
编辑:这里有一个 MCVE 供您将来参考:
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField tfUsername;
private JPasswordField tfPwd;
public Test() {
super();
JPanel myPanel = new JPanel();
getContentPane().add(myPanel);
myPanel.add(new JLabel("Username: "));
tfUsername = new JTextField(10);
myPanel.add(tfUsername);
myPanel.add(Box.createHorizontalStrut(20)); // a horizontal spacer
myPanel.add(new JLabel("Password: "));
tfPwd = new JPasswordField(10);
myPanel.add(tfPwd);
JButton btnLogin = new JButton("Login");
myPanel.add(btnLogin);
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
String user = tfUsername.getText();
if (usernamefield(user)) {
String pwd = tfPwd.getText(); // Deprecated (use "getPassword()" for better security, see
if (pwdfield(pwd))
JOptionPane.showMessageDialog(Test.this, "Password verified.");
else
JOptionPane.showMessageDialog(Test.this, "Error: Wrong username/password.", "Login error", JOptionPane.ERROR_MESSAGE);
} else
JOptionPane.showMessageDialog(Test.this, "Error: Unknown username.", "Login error", JOptionPane.WARNING_MESSAGE);
}
});
}
public static void main(String[] args) {
// You can do that outside of EDT (see
Test frm = new Test();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Outside of Test class so close operation is defined by the user and not the class
frm.pack();
frm.setVisible(true);
}
private static boolean usernamefield(String user) {
return "user".equals(user);
}
private static boolean pwdfield(String password) { // TODO: Change String to char[] to improve security
return "pwd".equals(password);
}
}