在JTEXTPANE具有输入焦点时,请显示joptionpane在Enter键上



我有一个JTextPane组件,我用来输出一些文本并允许用户将数据输入到同一组件中。是否有一种实现功能的方法,以便如果用户按Enter键,请显示JOptionPane

考虑设置JTEXTPANE上的键绑定,以便当按下Enter键时,KeyEvent.VK_ENTER时,它会触发显示joptionpane的抽象。与所有密钥绑定一样,这将意味着获取JTEXTPANES INPUTMAP和ACTIONMAP,并用一些常数的键字符串将它们绑定在一起。

您可以在此处找到关键绑定教程:键绑定

,例如,

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

最新更新