2017-02-18 56 views
-1

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

+1

应该是什么成分有焦点,当用户按下输入,文本窗格或按钮?如果文本窗格中的按钮与它无关。如果按钮,文本窗格与它无关。 –

+0

我误解了这个问题。 D'哦! –

+0

其文本面板 – Maryam

回答

3

考虑在JTextPane上设置键绑定,这样当按Enter键时,它会触发一个显示JOptionPane的AbstractAction。和所有的键绑定一样,这将意味着获取JTextPanes的InputMap和ActionMap,并用一些常量键String将它们绑定在一起。

您可以找到按键绑定教程在这里:Key Bindings

例如,

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()); 
    } 
} 
相关问题