这里是一名业余Java程序员。这是我仍在处理的代码。我的计划是使用JOptionPane来显示输入的密码是否正确以及尝试的次数。我的问题是,尝试输入的次数不会改变,如果输入正确的密码,循环就会继续,而不是我打算终止的计划。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Password extends JFrame {
private static final int WIDTH = 300;
private static final int HEIGHT = 165;
private static final int tries = 3;
private JLabel passwordLabel;
private JTextField passwordTF;
private JButton okB , cancelB;
private OkButtonHandler obHandler;
private CancelButtonHandler cbHandler;
public Password () {
passwordLabel = new JLabel ("Input password: " , SwingConstants.LEFT);
passwordTF = new JTextField (25);
okB = new JButton ("OK");
obHandler = new OkButtonHandler();
okB.addActionListener(obHandler);
cancelB = new JButton("Cancel");
cbHandler = new CancelButtonHandler();
cancelB.addActionListener(cbHandler);
Container pane = getContentPane();
pane.setLayout(null);
pane.add(passwordLabel);
pane.add(passwordTF);
pane.add(okB);
pane.add(cancelB);
passwordLabel.setBounds(100 , 0 , 100 , 50);
passwordTF.setBounds(5 , 40 , 275 , 30);
okB.setBounds(35 , 75 , 100 , 40);
cancelB.setBounds(150 , 75 , 100 , 40);
setTitle("Password");
setSize(WIDTH , HEIGHT);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private class OkButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
String prompt = passwordTF.getText();
for (int x = 1 ; x<=3 ; x++) {
if (x==1) {
if (prompt.equals("Computer")) {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access granted" , "Password" , JOptionPane.INFORMATION_MESSAGE);
break;
}
else {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access denied: "+(tries-1) , "Password" , JOptionPane.WARNING_MESSAGE);
continue;
}
}
else if (x==2) {
if (prompt.equals("Computer")) {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access granted" , "Password" , JOptionPane.INFORMATION_MESSAGE);
break;
}
else {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access denied: "+(tries-2) , "Password" , JOptionPane.WARNING_MESSAGE);
continue;
}
}
else if (x==3) {
if (prompt.equals("Computer")) {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access granted" , "Password" , JOptionPane.INFORMATION_MESSAGE);
break;
}
else {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access denied: System blocked" , "Password" , JOptionPane.WARNING_MESSAGE);
continue;
}
}
}
}
}
private class CancelButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
System.exit(0);
}
}
public static void main (String[] args) {
Password password = new Password ();
}
}
在这方面,无需使用for循环,方法是使用
continue;
它将继续通过for循环并依次打印每个错误消息。
每次按下“确定”按钮时调用actionListener时,请尝试如下操作:
private class OkButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
String prompt = passwordTF.getText();
if (prompt.equals("Computer")) {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access granted" , "Password" , JOptionPane.INFORMATION_MESSAGE);
}
else {
tries--;
if (tries != 0){
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access denied: "+(tries) , "Password" , JOptionPane.WARNING_MESSAGE);
}
else {
passwordTF.setText("");
JOptionPane.showMessageDialog(null , "Access denied: System blocked" , "Password" , JOptionPane.WARNING_MESSAGE);
System.exit(0);
}
}
}
}
如果您输入了3次错误的密码,此操作也将完成您需要的所有操作,然后关闭主机。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句