gpt4 book ai didi

java - 允许 "Enter"键按下提交按钮,而不是仅使用 MouseClick

转载 作者:IT老高 更新时间:2023-10-28 20:40:43 24 4
gpt4 key购买 nike

我现在正在学习 Swing 类(class)以及有关它的一切。我有一个我一直在整理的玩具程序,它会提示输入名称,然后显示一个带有消息“您已输入(您的姓名)”的 JOptionPane。我使用的提交按钮只能单击,但我也想让它与 Enter 按钮一起使用。我尝试添加一个 KeyListener,正如我正在使用的 Java 书籍(Eventful Java、Bruce Danyluk 和 Murtagh)中所推荐的那样。

NamePrompt enter image description here

这是我的代码:

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

//Add panelTop to JFrame
add(panelTop, BorderLayout.NORTH);
add(panelBottom, BorderLayout.SOUTH);

//JFrame set-up
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) {

}
}

最佳答案

有一个简单的技巧。在您使用所有按钮构建框架后,请执行以下操作:

frame.getRootPane().setDefaultButton(submitButton);

对于每一帧,您可以设置一个默认按钮,该按钮将自动监听 Enter 键(可能还有其他一些我不知道的事件)。当您在该框架中按 Enter 键时,将调用 ActionListener 的 actionPerformed() 方法。


据我所知,您的代码的问题是每次您按下一个键时都会弹出对话框,因为您没有将它放在 if-body 中。尝试将其更改为:

@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("Hello");

JOptionPane.showMessageDialog(null , "You've Submitted the name " + nameInput.getText());
}

}

更新:我发现您的代码有什么问题。您将关键监听器添加到提交按钮而不是文本字段。将您的代码更改为:

SubmitButton listener = new SubmitButton(textBoxToEnterName);
textBoxToEnterName.addActionListener(listener);
submit.addKeyListener(listener);

关于java - 允许 "Enter"键按下提交按钮,而不是仅使用 MouseClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13731710/

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