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:谢谢你