Java 如何将keyListner添加到JOptionPane.showInputDialog()中?
我想在输入对话框中添加keyListner。当我按下一个键时,它会给出按下键的键代码。下面是JTextField的完整代码及其对JTextField的工作。我通过Java 如何将keyListner添加到JOptionPane.showInputDialog()中?,java,keylistener,Java,Keylistener,我想在输入对话框中添加keyListner。当我按下一个键时,它会给出按下键的键代码。下面是JTextField的完整代码及其对JTextField的工作。我通过String n=JOptionPane.showInputDialog(“输入一个键”)在输入对话框中尝试了它,但它说无法识别用于字符串操作的keyListner *请为输入对话框编辑我的代码 import java.awt.event.*; import javax.swing.*; public class KeyListnerE
String n=JOptionPane.showInputDialog(“输入一个键”)
在输入对话框中尝试了它,但它说无法识别用于字符串操作的keyListner
*请为输入对话框编辑我的代码
import java.awt.event.*;
import javax.swing.*;
public class KeyListnerExample extends JFrame implements KeyListener{
String KeyCodeT = JOptionPane.showInputDialog("enter a key");//A Text Field that will display the key code.
public KeyListnerExample(){
KeyCodeT.addKeyListener(this);//Listens for key inputs in the text field
KeyCodeT.setEditable(false);//disallow user input into the Text field.
add(KeyCodeT);//add the text field to the screen
setSize(300,300);//set the screen size
setVisible(true);//show the window on screen.
}
//Called when the key is pressed down.
public void keyPressed(KeyEvent e){
System.out.println("Key Pressed!!!");
e.getKeyCode();
System.out.println("key code is: " +e.getKeyCode());
}
//Called when the key is released
public void keyReleased(KeyEvent e){
System.out.println("Key Released!!!");
KeyCodeT.setText("Key Code:" + e.getKeyCode());//displays the key code in the text box
}
//Called when a key is typed
public void keyTyped(KeyEvent e){
}
public static void main(String[] args){
KeyListnerExample key = new KeyListnerExample();
}
}
创建一个JPane控件,该控件包含将向密钥侦听器广播密钥事件的控件。 例如JTextField,然后将密钥侦听器添加到文本字段。
窗格可以作为参数传递给“JOptionPane”以下是您可以执行的操作提示:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class KeyListnerExample extends JFrame implements KeyListener{
JTextField KeyCodeT;
public KeyListnerExample(){
JPanel panel = new JPanel();
KeyCodeT = new JTextField();
KeyCodeT.setOpaque(false);
panel.setLayout(new GridLayout(1,1));
panel.add(KeyCodeT);
JOptionPane.showOptionDialog(null, panel, "Enter Key Code", JOptionPane.CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
KeyCodeT.addKeyListener(this);//Listens for key inputs in the text field
KeyCodeT.setEditable(false);//disallow user input into the Text field.
add(KeyCodeT);//add the text field to the screen
setSize(300,300);//set the screen size
setVisible(true);//show the window on screen.
}
//Called when the key is pressed down.
public void keyPressed(KeyEvent e){
System.out.println("Key Pressed!!!");
e.getKeyCode();
System.out.println("key code is: " +e.getKeyCode());
}
//Called when the key is released
public void keyReleased(KeyEvent e){
System.out.println("Key Released!!!");
KeyCodeT.setText("Key Code:" + e.getKeyCode());//displays the key code in the text box
}
//Called when a key is typed
public void keyTyped(KeyEvent e){
}
public static void main(String[] args){
KeyListnerExample key = new KeyListnerExample();
}
}
如您所见,我创建了一个JPanel,并在其中添加了文本字段。这样更容易管理。然后最终使用JOptionPane来显示内容
您还可以使用KeyCodeT.setboorder(null)代码>如果你不想要黑色边框。但这会给你一个荒谬的对话,你必须在中间进行猜测。
编辑:(实际上是@kamel2005在他的回答中所说的)。您可以尝试以下内容:
在这里,您可以通过添加keyListener来创建一个文本字段,该文本字段可以传递到JoptionPane
public static void main(String[] args) {
JFrame parent = new JFrame();
JOptionPane optionPane = new JOptionPane();
JTextField field = getField();
optionPane.setMessage(new Object[]{"Type something: ", field});
optionPane.setMessageType(JOptionPane.QUESTION_MESSAGE);
optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = optionPane.createDialog(parent, "My Customized OptionPane");
dialog.setVisible(true);
}
private static JTextField getField() {
JTextField field = new JTextField();
field.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Input: " + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
}
});
return field;
}
您在代码中的何处尝试了JOptionPane?我看不到它的迹象?显示出现错误的代码。确定我输入的shortlyKeyCodeT是字符串,您不能将KeyListener附加到字符串。已编辑我的代码。请看第四行代码。我怎样才能在输入对话框中使用它@Rafi不明白,请编辑我的代码以清除您的答案。我将放置一个代码片段,为您提供如何实现此案例的示例。回答正确,但您的代码也会显示文本字段。请告诉我如何隐藏它。我不想显示此文本字段。您可以设置useKeyCodeT.setOpaque(false)
,您将看不到文本字段。编辑:检查我编辑的代码。回答正确,但代码也显示文本字段。请告诉我如何隐藏它。我不想显示这个文本字段如果你隐藏这个文本字段,就不会有接收按键输入的控件,因此就不会有按键事件可听。我只想建议你,不要把事情复杂化,让你的生活变得轻松。更复杂的代码包含更多的错误,更难维护。正确的说法是,但正确的解决方案是什么?选择适合您的解决方案。我在很多情况下都使用了我给你们的例子。如果需要,还可以将其他控件添加到该JOptionPane。例如,JLabel向最终用户解释一些事情。这个例子使用了JOptionPane的静态方法,占用更少的空间。
public static void main(String[] args) {
JFrame parent = new JFrame();
JOptionPane optionPane = new JOptionPane();
JTextField field = getField();
optionPane.setMessage(new Object[]{"Type something: ", field});
optionPane.setMessageType(JOptionPane.QUESTION_MESSAGE);
optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = optionPane.createDialog(parent, "My Customized OptionPane");
dialog.setVisible(true);
}
private static JTextField getField() {
JTextField field = new JTextField();
field.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Input: " + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
}
});
return field;
}