Java 如何将keyListner添加到JOptionPane.showInputDialog()中?

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

我想在输入对话框中添加keyListner。当我按下一个键时,它会给出按下键的键代码。下面是JTextField的完整代码及其对JTextField的工作。我通过
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不明白,请编辑我的代码以清除您的答案。我将放置一个代码片段,为您提供如何实现此案例的示例。回答正确,但您的代码也会显示文本字段。请告诉我如何隐藏它。我不想显示此文本字段。您可以设置use
KeyCodeT.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;
}