允许按下"Enter"键来提交按钮,而不仅仅使用鼠标点击。

16 浏览
0 Comments

允许按下"Enter"键来提交按钮,而不仅仅使用鼠标点击。

我正在学习Swing类和与之相关的一切内容。我已经写了一个简单的程序,它提示用户输入姓名,然后使用JOptionPane显示消息"You've entered (Your Name)"。

我使用的提交按钮只能通过点击来触发,但我想让它也能通过按Enter键触发。我尝试添加一个KeyListener,这是我使用的Java书籍(Eventful Java, Bruce Danyluk and Murtagh)推荐的方法。

这是我的代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class NamePrompt extends JFrame{
    private static final long serialVersionUID = 1L;
    String name;
    
    public NamePrompt(){
        setLayout(new BorderLayout());
        
        JLabel enterYourName = new JLabel("Enter Your Name Here:");
        JTextField textBoxToEnterName = new JTextField(21);
        JPanel panelTop = new JPanel();
        panelTop.add(enterYourName);
        panelTop.add(textBoxToEnterName);
        
        JButton submit = new JButton("Submit");
        submit.addActionListener(new SubmitButton(textBoxToEnterName));
        submit.addKeyListener(new SubmitButton(textBoxToEnterName));
        JPanel panelBottom = new JPanel();
        panelBottom.add(submit);
        
        //将panelTop添加到JFrame
        add(panelTop, BorderLayout.NORTH);
        add(panelBottom, BorderLayout.SOUTH);
        
        //JFrame的设置
        setTitle("Name Prompt Program");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }
    
    public static void main(String[] args) {
        NamePrompt promptForName = new NamePrompt();
        promptForName.setVisible(true); 
    }
}

这是actionListener和keyListener类:

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class SubmitButton implements ActionListener, KeyListener {
    JTextField nameInput;
    
    public SubmitButton(JTextField textfield){
        nameInput = textfield;
    }
    
    @Override
    public void actionPerformed(ActionEvent submitClicked) {
        Component frame = new JFrame();
        JOptionPane.showMessageDialog(frame , "You've Submitted the name " + nameInput.getText());
    }
    
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode()==KeyEvent.VK_ENTER){
            System.out.println("Hello");
        }
        Component frame = new JFrame();
        JOptionPane.showMessageDialog(frame , "You've Submitted the name " + nameInput.getText());
    }
    
    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub
    }
    
    @Override
    public void keyTyped(KeyEvent arg0) {
    }
}

0