Java ActionPerformed函数工作,但公共静态void main中的if语句不工作
我可以让它在同一个文件中工作,但我不习惯在不同的文件中使用多个类。为了缩短代码,我省略了导入 代码如下: Main.java:Java ActionPerformed函数工作,但公共静态void main中的if语句不工作,java,Java,我可以让它在同一个文件中工作,但我不习惯在不同的文件中使用多个类。为了缩短代码,我省略了导入 代码如下: Main.java: public class Main { public static void main(String[] args) { handler handler = new handler(); Login Login = new Login(); List<String> users =
public class Main {
public static void main(String[] args) {
handler handler = new handler();
Login Login = new Login();
List<String> users = new ArrayList<>();
List<String> passwords = new ArrayList<>();
users.add("123");
passwords.add("123");
if (handler.buttonPress) {
String userInput = Login.userText.getText();
String passwordInput = String.valueOf(Login.passwordText.getPassword());
if (users.contains(userInput)) {
int userNo = users.indexOf(userInput);
String password = passwords.get(userNo);
if (passwordInput.equals(password)) {
Login.outcomeLabel.setText("Login Successfull!");
}
else {
Login.outcomeLabel.setText("Username or Password not recognised");
}
}
else {
Login.outcomeLabel.setText("Username or Password not recognised");
}
}
}
}
handler.java:
public class handler implements ActionListener {
Login Login = new Login();
boolean buttonPress;
public void actionPerformed(ActionEvent loginButton) {
buttonPress = true;
}
}
因此,操作侦听器正在将布尔值设置为true,但if语句未识别它。此代码存在问题:
- 创建密钥类的单个实例并在需要时传递它们,而不是在不同的类中创建多个实例
- 如果需要模态窗口,请显示模态对话框,如模态JDialog
- 坚持使用线性非GUI编程范式或事件驱动GUI范式,以避免大量头痛问题和不协调的代码。更好的做法是,将程序逻辑与视图(用户交互)分开,以便相同的逻辑/数据部分可以在事件驱动GUI或非事件驱动线性程序中使用
- 学习并遵循Java命名约定,包括给以大写字母开头的类命名和以小写字母开头的字段命名。这将使您的代码更容易让其他人理解
- 创建密钥类的单个实例并在需要时传递它们,而不是在不同的类中创建多个实例
- 如果需要模态窗口,请显示模态对话框,如模态JDialog
- 坚持使用线性非GUI编程范式或事件驱动GUI范式,以避免大量头痛问题和不协调的代码。更好的做法是,将程序逻辑与视图(用户交互)分开,以便相同的逻辑/数据部分可以在事件驱动GUI或非事件驱动线性程序中使用
- 学习并遵循Java命名约定,包括给以大写字母开头的类命名和以小写字母开头的字段命名。这将使您的代码更容易让其他人理解
actionPerformed
方法中呢?这里有很多严重的问题,但主要的问题是:JFrames不是模态的,你在用户有机会更改它之前检查程序状态,其次,你在创建多个类实例,而不是检查重要类的状态,因此,如果您需要一个Swing GUI窗口来进行模式化操作,在处理之前阻止程序流,那么创建并显示一个模型JDialog,而不是JFrame。接下来,只为上面的每个关键类创建一个实例,而不是创建多个实例,并将这些实例作为参数传递到所需的位置。我如何传递实例?上面的代码也会导致StackOverflower错误为什么不在actionPerformed
方法中移动逻辑?这里有一系列严重问题,但主要问题是:JFrames不是模态的,在用户有机会更改程序状态之前检查程序状态,其次,创建多个类实例,而不检查重要类的状态,即与用户相关的类。因此,如果需要Swing GUI窗口进行模式操作,在处理之前阻止程序流,然后创建并显示模型JDialog,而不是JFrame。接下来,只为上面的每个关键类创建一个实例,而不是创建多个实例,并将这些实例作为参数传递到需要它们的位置。我该如何传递实例?上面的代码也会导致StackOverflower错误
public class handler implements ActionListener {
Login Login = new Login();
boolean buttonPress;
public void actionPerformed(ActionEvent loginButton) {
buttonPress = true;
}
}
class Login {
// Main main = new Main(); // serves no purpose
// handler handler = new handler(); // a circular reference
handler handler;
//
public void setHandler(handler handler) {
this.handler = handler;
}