gpt4 book ai didi

Java : Wait for user input on swing window

转载 作者:行者123 更新时间:2023-11-30 08:03:47 27 4
gpt4 key购买 nike

<分区>

所以,大约一周前我开始学习 java,我在构建一个小程序时遇到了一些问题,这个小程序通常用于训练 swing 和 oop/java。

程序(到目前为止)有一个 MainClass 和一个 Window 类。MainClass 创建 Window 类的一个实例,该实例创建一个 JFrame 并将用户输入保存在一个字段中。

此时,MainClass 打印输出,这是我通过 getter 方法获得的。

问题是我仍然以程序的方式思考:MainClass 打印 null,因为它不等待 window istance 获取用户输入。

我该如何修复它,从而让 main 在打印之前等待窗口接受用户输入?

铌。 Jframe 的东西工作了,窗口出现了,只是 MainClass 没有等待它做它应该做的事情。我可以(我想?)使用一些 sleep 命令来等待,但它似乎完全错误。

这是MainClass.java的代码

import java.util.Arrays;

public class MainClass {

private char[] password;
private String pin;

public static void main(String[] args) {

Window w = new Window();
System.out.println(w.getPin() + Arrays.toString(w.getPassword()) + '1');
}


}

和Window.java

import java.awt.*;
import javax.swing.*;
import java.awt.Window.Type;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import net.miginfocom.swing.MigLayout;


public class Window extends JFrame{

private JTextField textField_1;
private JButton btnNewButton;
private JPanel panel;
private JPasswordField passwordField;
private char[] password = new char[10];
private String pin;


public Window() {

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setSize(370, 150);
this.setForeground(new Color(192, 192, 192));
this.setTitle("Access Password Manager");
this.setResizable(false);

panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new MigLayout("", "[70.00][132.00,grow][44.00][67.00,grow][61.00][]", "[19.00][34.00][]"));

JLabel lblNewLabel = new JLabel("Password");
panel.add(lblNewLabel, "cell 0 1,alignx trailing,aligny center");

passwordField = new JPasswordField();
passwordField.setColumns(13);
panel.add(passwordField, "cell 1 1,alignx center");

JLabel lblNewLabel_1 = new JLabel("Key");
panel.add(lblNewLabel_1, "cell 2 1,alignx center,aligny center");

textField_1 = new JTextField();
panel.add(textField_1, "cell 3 1,alignx left,aligny center");
textField_1.setColumns(4);

btnNewButton = new JButton("Log In");
ListenForButton listener = new ListenForButton();

btnNewButton.addActionListener(listener);
panel.add(btnNewButton, "cell 4 1");

this.setVisible(true);

}

private class ListenForButton implements ActionListener{


@Override
public void actionPerformed(ActionEvent e) {

if(e.getSource() == btnNewButton){

if (passwordField.getPassword().length < 10){

password = passwordField.getPassword().clone();
}

pin = textField_1.getText();

}
}
}


public char[] getPassword(){
return password;
}

public String getPin(){
return pin;
}


}

编辑:

这不仅仅是关于打印,我知道我可以直接在 Window.class 中进行打印。如果我解释得不好,我很抱歉。请将 println 视为“一旦窗口从输入中保存了这些字段,我就需要访问并处理这些字段”。

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