java 窗口登陆程序 麻烦帮我完善下几个很简单问题 本人刚开始学Java?

代码如下:
问题我备注
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class My extends JFrame implements ActionListener{
JLabel a4,a5,a6,a8;
JTextField a3;
JButton a1,a2;
JPasswordField a7;

My(){
a5=new JLabel("用户名");
a3=new JTextField(6);
a3.addActionListener(this);
a6=new JLabel("密码");
a7=new JPasswordField(6);
a7.addActionListener(this);
a1=new JButton("登录");
a1.addActionListener(this);
a2=new JButton("取消");
a2.addActionListener(this);
a8=new JLabel("欢迎进入信息录入系统");
a4=new JLabel(new ImageIcon("a.jpg"));
a8.setFont(new Font("楷体",Font.BOLD,28));
this.setLayout(new FlowLayout());
this.add(a8);this.add(a4);
this.add(a5);this.add(a3);
this.add(a6);this.add(a7);
this.add(a1);this.add(a2);
add(a8,BorderLayout.SOUTH);
add(a4,BorderLayout.CENTER);
add(a5,BorderLayout.NORTH);add(a3,BorderLayout.NORTH);
add(a6,BorderLayout.NORTH);add(a7,BorderLayout.NORTH);
add(a1,BorderLayout.NORTH);add(a2,BorderLayout.NORTH);
this.setVisible(true);
this.setSize(400,340);
this.setLocationRelativeTo(null);
this.setTitle("登陆界面");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getRootPane().setDefaultButton(a1);
}
private void registerKeyListener(){
a7.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent event){
if (KeyEvent.getKeyText(event.getKeyCode()).compareToIgnoreCase("Enter")==0){
a1.doClick();
}
}
});//我想键盘按回车实现登陆不用点击登陆按钮
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()==a1) {
String s=a3.getText();
if(s.trim().equals("")) {
JOptionPane.showMessageDialog(null, "输入内容不能为空","不合法提示",JOptionPane.INFORMATION_MESSAGE);
}//内容为空的时候他会有俩个弹窗麻烦让他内容为空的时候只弹出一个
}
if(ae.getSource()==a2){

}
if(ae.getSource()==a1) { 
    String q=a3.getText();
    String w= String.valueOf(a7.getPassword());
    if((q.equals("123")) && (w.equals("123"))) {
        JOptionPane.showMessageDialog(null, "登陆成功","确认登陆",JOptionPane.INFORMATION_MESSAGE);
        this.dispose();
        new My1();
    }
    else {
        JOptionPane.showMessageDialog(null, "用户名或密码错误","不合法提示",JOptionPane.INFORMATION_MESSAGE);
    }
    }   

}
}
public class Test1 {
public static void main(String[] args) {
new My();
}
}

针对你的问题,我一点点说,首先,如果你想实现回车键登录,那就必须监听到回车键事件,因此,你需要实现按键监听的接口,也就是KeyListener,当你实现KeyListener接口之后,会重写三个方法,分别是:keyPressed、keyReleased、keyTyped,其中keyPressed就是响应回车键事件代码的地方,下面我贴上改过的代码
先实现监听

public class My extends JFrame implements ActionListener,KeyListener{

然后写监听的代码

@Override
    public void keyPressed(KeyEvent e) {
        if(e.getSource()==a7 ||e.getSource() == a3){
            if(e.getKeyCode()==KeyEvent.VK_ENTER){
                String s=a3.getText();
                String w= String.valueOf(a7.getPassword());
                if(s.trim().equals("")) {
                    JOptionPane.showMessageDialog(null, "输入内容不能为空","不合法提示",JOptionPane.INFORMATION_MESSAGE); 
                    return;//这里加return就会规避调下面的提示
                }
                if((s.equals("123")) && (w.equals("123"))) {
                    JOptionPane.showMessageDialog(null, "登陆成功","确认登陆",JOptionPane.INFORMATION_MESSAGE);
                    this.dispose();
                    new My();
                }
                else {
                    JOptionPane.showMessageDialog(null, "用户名或密码错误","不合法提示",JOptionPane.INFORMATION_MESSAGE);
                    return;//这里是同样的道理
                }
            }
        }

    }

上面就是响应回车键事件的全部代码,里面包括了你的第二个问题,想要针对错误提示只弹一次框,只需要在提示之后return就行了
最后,你需要给你的两个输入框添加事件监听

a3.addKeyListener(this);
a7.addKeyListener(this);

如果帮到你,请采纳