gpt4 book ai didi

java - 如何向现有 Java Swing 程序添加登录屏幕?

转载 作者:行者123 更新时间:2023-12-02 08:02:02 26 4
gpt4 key购买 nike

我已经有了一个非常基本的 Java Swing 程序,但意识到我可以使用一个简单的用户名/密码登录屏幕来限制只有拥有用户名和密码的人才能访问它。

无论如何,我是否可以在主方法的开头插入一些代码,以防止在出现的屏幕上输入用户名和密码之前执行超出该方法的代码?

最佳答案

这是登录对话框的示例。通过关闭对话框来关闭整个程序。

Username: stackoverflow Password: stackoverflow

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestFrame extends JFrame {

private PassWordDialog passDialog;

public TestFrame() {
passDialog = new PassWordDialog(this, true);
passDialog.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new TestFrame();
frame.getContentPane().setBackground(Color.BLACK);
frame.setTitle("Logged In");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
});
}
}

class PassWordDialog extends JDialog {

private final JLabel jlblUsername = new JLabel("Username");
private final JLabel jlblPassword = new JLabel("Password");

private final JTextField jtfUsername = new JTextField(15);
private final JPasswordField jpfPassword = new JPasswordField();

private final JButton jbtOk = new JButton("Login");
private final JButton jbtCancel = new JButton("Cancel");

private final JLabel jlblStatus = new JLabel(" ");

public PassWordDialog() {
this(null, true);
}

public PassWordDialog(final JFrame parent, boolean modal) {
super(parent, modal);

JPanel p3 = new JPanel(new GridLayout(2, 1));
p3.add(jlblUsername);
p3.add(jlblPassword);

JPanel p4 = new JPanel(new GridLayout(2, 1));
p4.add(jtfUsername);
p4.add(jpfPassword);

JPanel p1 = new JPanel();
p1.add(p3);
p1.add(p4);

JPanel p2 = new JPanel();
p2.add(jbtOk);
p2.add(jbtCancel);

JPanel p5 = new JPanel(new BorderLayout());
p5.add(p2, BorderLayout.CENTER);
p5.add(jlblStatus, BorderLayout.NORTH);
jlblStatus.setForeground(Color.RED);
jlblStatus.setHorizontalAlignment(SwingConstants.CENTER);

setLayout(new BorderLayout());
add(p1, BorderLayout.CENTER);
add(p5, BorderLayout.SOUTH);
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


jbtOk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if ("stackoverflow".equals(String.valueOf(jpfPassword.getPassword()))
&& "stackoverflow".equals(jtfUsername.getText())) {
parent.setVisible(true);
setVisible(false);
} else {
jlblStatus.setText("Invalid username or password");
}
}
});
jbtCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
parent.dispose();
System.exit(0);
}
});
}
}

关于java - 如何向现有 Java Swing 程序添加登录屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com