Java 当JTextPane具有输入焦点时,按Enter键时显示JOptionPane

Java 当JTextPane具有输入焦点时,按Enter键时显示JOptionPane,java,swing,jtextpane,enter,Java,Swing,Jtextpane,Enter,我有一个JTextPane组件,用于输出一些文本,并允许用户向同一组件输入数据。是否有一种方法可以实现这样的功能:如果用户按Enter键,则显示一个作业窗格 考虑在JTextPane上设置键绑定,这样当按下enter键时,KeyEvent.VK\u enter,它会触发一个显示JOptionPane的抽象操作。与所有键绑定一样,这将意味着获取JTextPanes InputMap和ActionMap,并使用一些常量键字符串将它们绑定在一起 您可以在此处找到密钥绑定教程: e、 g import

我有一个
JTextPane
组件,用于输出一些文本,并允许用户向同一组件输入数据。是否有一种方法可以实现这样的功能:如果用户按Enter键,则显示一个
作业窗格

考虑在JTextPane上设置键绑定,这样当按下enter键时,
KeyEvent.VK\u enter
,它会触发一个显示JOptionPane的抽象操作。与所有键绑定一样,这将意味着获取JTextPanes InputMap和ActionMap,并使用一些常量键字符串将它们绑定在一起

您可以在此处找到密钥绑定教程:

e、 g

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class TextPaneBinding extends JPanel {
    private JTextPane textPane = new JTextPane();

    public TextPaneBinding() {

        // get the enter key stroke and create a key String for binding from it
        KeyStroke enterKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
        String bindingKey = enterKeyStroke.toString();

        // get our input map and action map
        int condition = JComponent.WHEN_FOCUSED;
        InputMap inputMap = textPane.getInputMap(condition); // only want when focused
        ActionMap actionMap = textPane.getActionMap();

        // set up the binding of the key stroke to the action
        inputMap.put(enterKeyStroke, bindingKey);
        actionMap.put(bindingKey, new MyAction());

        setLayout(new BorderLayout());
        setPreferredSize(new Dimension(300, 300));
        add(new JScrollPane(textPane));
    }

    private class MyAction extends AbstractAction {
        @Override
        public void actionPerformed(ActionEvent e) {
            String message = "This is the JOptionPane Message";
            String title = "My Title";
            int messageType = JOptionPane.INFORMATION_MESSAGE;
            JOptionPane.showMessageDialog(textPane, message, title, messageType);
        }
    }

    private static void createAndShowGui() {
        TextPaneBinding mainPanel = new TextPaneBinding();

        JFrame frame = new JFrame("TextPaneBinding");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

当用户按下enter键、文本窗格或按钮时,哪个组件应该具有焦点?如果是文本窗格,则按钮与此无关。如果按下按钮,文本窗格与此无关。我误读了问题。哦!是textpanel@HovercraftFullOfEels,我猜OP的意思是“在键盘上输入键”,所以为输入键创建自定义键绑定的解决方案是正确的。@camickr:谢谢你