Java Swing:初始化身份验证类后未检测到 ATM_Interface 按键事件

问题描述 投票:0回答:1

我遇到了初始化身份验证类后在 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 中检测到关键事件?任何帮助将不胜感激!

java swing
1个回答
0
投票

类似下面的内容应该可以为您完成。请参阅 Javadoc

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"));
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.