2012-05-20 2 views
3

Пожалуйста, посмотрите на следующий кодJTextPane: комбинации клавиш не работают на StyledEditorKit

import java.awt.Color;  
import java.awt.Dimension;  
import java.awt.FlowLayout;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.awt.event.KeyEvent; 
import java.util.ArrayList;  
import java.util.List;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
import javax.swing.*;  
import javax.swing.text.*;  

    public class Form1 extends JFrame  
    {  
     private JTextPane textPane;  
     private JPanel south;  
     private JScrollPane scroll;  

     private String content;  
     public String documentType;     


     private DefaultStyledDocument document;   
     int start, end, offset1,length1;   
     private JButton button;    
     JFrame frame;  


     public Form1()  
     {  

      //Declaring the instance variables  
      textPane = new JTextPane();  
      textPane.setMinimumSize(new Dimension(100,100));  

      button = new JButton("Bold");  
      button.addActionListener(new StyledEditorKit.BoldAction());  
      button.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_MASK),"key"); 
     button.getActionMap().put("key", new StyledEditorKit.BoldAction()); 

      document = (DefaultStyledDocument) textPane.getDocument();   




      //Creating the main window  
      south = new JPanel();  
      south.setLayout(new FlowLayout());  
      south.add(button);       
      scroll = new JScrollPane(textPane);  

      getContentPane().add(scroll,"Center");  
      getContentPane().add(south,"South");     

      setSize(800,600);  
      validate();  
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
     }  


     private class Action extends AbstractAction  
     {  
      public void actionPerformed(ActionEvent ae)  
      {    
       new StyledEditorKit.BoldAction(); 
      } 
     }  

     public static void main(String[] args) throws Exception {  
      SwingUtilities.invokeLater(new Runnable()  
      {   
       @Override   
       public void run() {   
       Form1 f = new Form1(); 
       f.setVisible(true); 
       }   
      });   
      }  
    } 

Здесь, пользователь может ввести любой текст, и когда он выберите текст и нажмите на кнопку «Жирный», то текст будет выделен жирным шрифтом. Тем не менее, мне нужно сделать это, используя CTRL + B. Как вы можете видеть, моя попытка не дает ответа на это ключевое событие. Я даже попытался добавить его в отдельный класс, который расширяет AbstractAction, но все равно ничего хорошего. Как я могу реализовать CTRL + B здесь? Пожалуйста, помогите ...

ответ

4

Когда привязки клавиш не работают для меня, первое, что я смотрю, это InputMap - я уверен, что я использую правильный? Ну, ты уверен? По умолчанию используется JComponent.WHEN_FOCUSED и, следовательно, работает только в том случае, если ваш компонент имеет фокус.

Если вы хотите, чтобы он работал в другое время, скажите, когда связанный компонент виден и в сфокусированном окне, но не обязательно имеет фокус, возможно, вы должны попробовать различные параметры условия. Попробуйте использовать JComponent.WHEN_IN_FOCUSED_WINDOW для начала.

т.е.

InputMap inputMap = myComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 
+0

Должен сказать одно ... УДИВИТЕЛЬНЫЙ !!!! Большое спасибо! –

+0

Ты очень рад и рад, что это помогло. –