我正在设计的程序允许用户仅在将当前管理员密码输入到下面的 setupModeLock 类中的密码字段后才能更改管理员密码。但是,密码永远不会保存到 setupModeLock 变量 pWord
import javax.swing.*;
import java.awt.event.*;
public class setupModeLock {
private static int pWord;
public final JFrame miniScreen;
setupModeLock() {
miniScreen = new JFrame("Setup Mode");
final JLabel info = new JLabel("Please enter an admin password");
final JPasswordField adminField = new JPasswordField();
final JLabel result = new JLabel("");
info.setBounds(120, 300, 200, 30);
adminField.setBounds(120, 325, 200, 30);
result.setBounds(200, 325, 400, 30);
miniScreen.add(info);
miniScreen.add(adminField);
miniScreen.add(result);
adminField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent code) {
String password = new String(adminField.getPassword());
try {
int val = Integer.parseInt(password);
if(val == pWord)
{
miniScreen.dispose();
new setUpMode()
}
else
{
adminField.setText("");
result.setText("Incorrect Password");
}
} catch (Exception e) {
adminField.setText("");
result.setText("Invalid Password");
}
}
});
miniScreen.setSize(780,700);
miniScreen.setVisible(true);
miniScreen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void changePassword(int newPass)
{
pWord = newPass;
}
public static int getPword()
{
return pWord;
}
}
接下来的课实际上显示的是更改密码的按钮
import javax.swing.*;
import java.awt.event.*;
public class setUpMode extends setupModeLock{
public JFrame window;
setUpMode() {
super();
miniScreen.dispose();
window = new JFrame();
window.setAlwaysOnTop(true);
JButton modPassword = new JButton("Change Admin Password");
modPassword.setBounds(1000, 800, 300, 30);
window.add(modPassword);
modPassword.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent c) {
new PasswordChanger();
}
});
}
}
在类PasswordChanger中,用户向PasswordField输入密码,然后在setUpModeLock中使用继承的方法changePassword更改密码
import javax.swing.*;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PasswordChanger extends setupModeLock implements ActionListener {
JPasswordField thisField;
JLabel success;
Container container;
CardLayout cardlayout;
PasswordChanger() {
super();
miniScreen.dispose();
JFrame newPlace = new JFrame("Change Password");
container = newPlace.getContentPane();
cardlayout = new CardLayout();
container.setLayout(cardlayout);
success = new JLabel("");
thisField = new JPasswordField();
thisField.addActionListener(this);
container.add("a", thisField);
container.add("b", success);
newPlace.setSize(300,100);
newPlace.setVisible(true);
newPlace.setLocationRelativeTo(null);
newPlace.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent bro) {
val = new String(thisField.getPassword());
try
{
int pCode = Integer.parseInt(val);
changePassword(pCode);
success.setText("Password successfuly save. Exit now");
} catch(Exception e) {
success.setText("Faulty Password type. Exit and try again");
}
cardlayout.next(container);
}
}
但是运行后,setupMode中连更改密码JButton都没有出现。
我尝试继承多个类,但我的密码始终保持为 0。我可以做什么来修改 setUpModeLock 中的密码,以便任何对 changePassword() 的调用都会使新密码在所有子类中成为常量。
如果您利用现有的方法,例如,您可以使用更少的代码行。 JOptionPane。这是一个仍然需要填写一些位的示例。它定义了一个面板,其中包含读取数据所需的输入元素和 getter。然后有一个方法
changePassword()
向用户显示面板并评估数据。
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.TextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class ChangePassword extends JPanel {
private JTextField username;
private JPasswordField oldPassword;
private JPasswordField newPassword1;
private JPasswordField newPassword2;
public ChangePassword() {
setLayout(new GridBagLayout());
add(new JLabel("Username"), new GridBagConstraints(0,0, 1, 1, 0,0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
username = new JTextField(30);
add(username, new GridBagConstraints(1,0, 1, 1, 0,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0), 0,0));
add(new JLabel("Old Password"), new GridBagConstraints(0,1, 1, 1, 0,0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
oldPassword = new JPasswordField();
add(oldPassword, new GridBagConstraints(1,1, 1, 1, 0,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0), 0,0));
add(new JLabel("New Password"), new GridBagConstraints(0,2, 1, 1, 0,0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
newPassword1 = new JPasswordField();
add(newPassword1, new GridBagConstraints(1,2, 1, 1, 0,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0), 0,0));
add(new JLabel("Repeat Password"), new GridBagConstraints(0,3, 1, 1, 0,0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
newPassword2 = new JPasswordField();
add(newPassword2, new GridBagConstraints(1,3, 1, 1, 0,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0), 0,0));
}
public String getUsername() {
return username.getText();
}
public char[] getOldPassword() {
return oldPassword.getPassword();
}
public char[] getNewPassword1() {
return newPassword1.getPassword();
}
public char[] getNewPassword2() {
return newPassword2.getPassword();
}
public static void changePassword() {
ChangePassword cp = new ChangePassword();
if (JOptionPane.showOptionDialog(
null, cp, "Authentication required",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE,
null, null, null) == JOptionPane.OK_OPTION) {
// check if username and old password are correct
String username = cp.getUsername();
char[] oldPassword = cp.getOldPassword();
// check if newPassword1 and newPassword2 are the same
char[] newPassword1 = cp.getNewPassword1();
char[] newPassword2 = cp.getNewPassword2();
// change password
JOptionPane.showMessageDialog(null, "Password changed");
} else {
JOptionPane.showMessageDialog(null, "Cancelled by user");
}
}
public static void main(String[] args) {
changePassword();
}
}