编程实现如图1所示的图形界面,当输入的账号名或密码不正确时,单击登录按钮将弹出对话框,提示“您输入的账号名或密码有误,请重新输入”,若输入信息错误次数超过3次,将关闭窗口。当输入正确的账号名“a123”和密码“s456”,单击登录按钮后,将弹出图形界面2,输入起始数据3位整数a和终止数据3位整数b(a<b),若输入的起始数据大于终止数据,将弹出对话框提示“输入有误!第一个数应小于第二个数”,单击求质数按钮,将把[a,b]之间的质数个数填入结果后的单行文本框内,若单击求水仙花数按钮,将把[a,b]之间的水仙花数填入结果后的单行文本框内。
时间: 2023-12-11 11:05:07 浏览: 145
很高兴为您提供 Java 代码实现,以下是代码:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GuiDemo extends JFrame {
private int count = 0; // 记录错误次数
private JTextField userNameTextField;
private JPasswordField passwordField;
private JTextField startTextField;
private JTextField endTextField;
private JTextField resultTextField;
public GuiDemo() {
setTitle("登录窗口");
setSize(400, 200);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel loginPanel = new JPanel();
loginPanel.setLayout(new GridLayout(3, 2));
JLabel userNameLabel = new JLabel("用户名:");
userNameTextField = new JTextField(10);
JLabel passwordLabel = new JLabel("密码:");
passwordField = new JPasswordField(10);
JButton loginButton = new JButton("登录");
loginButton.addActionListener(new LoginButtonListener());
loginPanel.add(userNameLabel);
loginPanel.add(userNameTextField);
loginPanel.add(passwordLabel);
loginPanel.add(passwordField);
loginPanel.add(new JLabel());
loginPanel.add(loginButton);
add(loginPanel);
setVisible(true);
}
private class LoginButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String userName = userNameTextField.getText();
char[] password = passwordField.getPassword();
if (userName.equals("a123") && new String(password).equals("s456")) {
setTitle("主窗口");
setSize(400, 300);
setLocationRelativeTo(null);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(4, 2));
JLabel startLabel = new JLabel("起始数据:");
startTextField = new JTextField(10);
JLabel endLabel = new JLabel("终止数据:");
endTextField = new JTextField(10);
JButton primeButton = new JButton("求质数");
primeButton.addActionListener(new PrimeButtonListener());
JButton narcissisticButton = new JButton("求水仙花数");
narcissisticButton.addActionListener(new NarcissisticButtonListener());
JLabel resultLabel = new JLabel("结果:");
resultTextField = new JTextField(10);
resultTextField.setEditable(false);
mainPanel.add(startLabel);
mainPanel.add(startTextField);
mainPanel.add(endLabel);
mainPanel.add(endTextField);
mainPanel.add(primeButton);
mainPanel.add(narcissisticButton);
mainPanel.add(resultLabel);
mainPanel.add(resultTextField);
add(mainPanel);
validate();
} else {
count++;
if (count >= 3) {
JOptionPane.showMessageDialog(null, "输入错误次数超过3次,窗口即将关闭");
System.exit(0);
} else {
JOptionPane.showMessageDialog(null, "您输入的账号名或密码有误,请重新输入");
}
}
}
}
private class PrimeButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int start = Integer.parseInt(startTextField.getText());
int end = Integer.parseInt(endTextField.getText());
if (start >= end) {
JOptionPane.showMessageDialog(null, "输入有误!第一个数应小于第二个数");
return;
}
int count = 0;
for (int i = start; i <= end; i++) {
if (isPrime(i)) {
count++;
}
}
resultTextField.setText(String.valueOf(count));
}
}
private class NarcissisticButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int start = Integer.parseInt(startTextField.getText());
int end = Integer.parseInt(endTextField.getText());
if (start >= end) {
JOptionPane.showMessageDialog(null, "输入有误!第一个数应小于第二个数");
return;
}
StringBuilder result = new StringBuilder();
for (int i = start; i <= end; i++) {
if (isNarcissistic(i)) {
result.append(i).append(" ");
}
}
resultTextField.setText(result.toString());
}
}
private boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
private boolean isNarcissistic(int n) {
int sum = 0;
int temp = n;
int length = String.valueOf(n).length();
while (temp > 0) {
int digit = temp % 10;
sum += Math.pow(digit, length);
temp /= 10;
}
return sum == n;
}
public static void main(String[] args) {
new GuiDemo();
}
}
```
在主函数中创建了 GuiDemo 类的实例,这个类继承自 JFrame 类。
在 GuiDemo 类的构造函数中,创建了登录界面的 JPanel 和登录按钮,并添加到 JFrame 中。当用户单击登录按钮时,会调用 LoginButtonListener 类的 actionPerformed 方法,该方法根据用户输入的账号名和密码进行验证。如果验证失败,会弹出提示框。如果验证成功,会创建主界面的 JPanel 和两个按钮,并添加到 JFrame 中。
在主界面的 JPanel 中,分别添加了起始数据和终止数据的文本框、两个按钮和结果文本框。当用户单击求质数或求水仙花数按钮时,会调用 PrimeButtonListener 类或 NarcissisticButtonListener 类的 actionPerformed 方法,该方法会根据用户输入的起始数据和终止数据计算出质数或水仙花数,并将结果填入结果文本框中。
在 GuiDemo 类中,还定义了 isPrime 和 isNarcissistic 方法,用来判断一个数是否为质数或水仙花数。
祝您编写愉快!
阅读全文