我遇到了初始化身份验证类后在 ATM_Interface 类中未检测到关键事件的问题。这是我的代码的相关部分:
public class ATM_Interface extends JPanel {
static String Status="";
public ATM_Interface(){
this.setPreferredSize(new Dimension(200,200));
this.setBackground(Color.blue);
this.setBounds(115,67,340,340);
this.addKeyListener(new keyAdapter());
this.setFocusable(true);
Authentication auth = new Authentication();
this.requestFocusInWindow();
}
class keyAdapter extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e){
switch(Status){
case "authentication":
break;
default:
add(auth);
Status="authentication";
}
System.out.println("test");
}
}
}
public class Authentication extends JPanel {
JTextField input = new JTextField();
public Authentication(){
input.setPreferredSize(new Dimension(100,50));
this.add(input);
}
public boolean getAcces(){
if(input.getText().equals("0234")){
return true;
}
else return false;
}
}
在此代码中,ATM_Interface JPanel 应该使用 KeyAdapter 捕获按键事件。但是,在初始化 Authentification 类并将其作为子组件添加到 ATM_Interface 后,ATM_Interface JPanel 中未检测到关键事件。
我已经尝试使用 requestFocusInWindow() 和 setFocusable() 将焦点设置到 ATM_Interface 面板,但它似乎无法解决问题。 如何确保在 ATM_Interface JPanel 中检测到关键事件?任何帮助将不胜感激!
DocumentListener
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Dimension;
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
public class Authentication extends JPanel implements DocumentListener {
JTextField input = new JTextField();
public Authentication() {
input.setPreferredSize(new Dimension(100, 30));
input.getDocument().addDocumentListener(this);
this.add(input);
}
@Override
public void changedUpdate(DocumentEvent e) {
if (getAccess()) {
doOnAccess();
}
}
@Override
public void insertUpdate(DocumentEvent e) {
if (getAccess()) {
doOnAccess();
}
}
@Override
public void removeUpdate(DocumentEvent e) {
if (getAccess()) {
doOnAccess();
}
}
private void doOnAccess() {
System.out.println("Yes, we're in!");
}
public boolean getAccess() {
return (input.getText().equals("0234"));
}
}