2012-07-16 2 views
0

CTRL + C를 누르면 특정 문자열을 JEditorPane의 현재 캐럿 위치로 인쇄하려고합니다. 두 가지 주요 이벤트를 처리하고 현재 캐럿 위치로 인쇄하는 방법을 잘 모르겠습니다. API는 기술을 잘 설명하지 못합니다. 나는 다음과 같이 될 것이라고 생각합니다 :Ctrl + C를 누를 때 JEditorPane의 캐럿 위치에 문자열을 인쇄하십시오.

@Override 
public void keyPressed(KeyEvent e) { 
    if((e.getKeyChar()==KeyEvent.VK_CONTROL) && (e.getKeyChar()==KeyEvent.VK_C)) 
     //JEditorPane.getCaretPosition(); 
     //BufferedWriter bw = new BufferedWriter(); 
     //JEditorPane.write(bw.write("desired string")); 
} 

누군가가 이것이 작동 할 수 있다고 말할 수 있습니까?

답변

4

해당 이벤트에 대한 keyChar은 동시에 VK_CONTROL과 VK_C와 동일하지 않습니다. 이벤트에 대한 수정 자로 CONTROL 키를 확인하십시오. 편집기 창에 텍스트를 삽입하거나 추가하려면 텍스트가 들어있는 기본 Document 객체를 잡고 텍스트를 삽입하는 것이 좋습니다.

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.text.BadLocationException; 

public class EditorPaneEx { 

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    JEditorPane editorPane = new JEditorPane(); 
    editorPane.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent ev) { 
      if (ev.getKeyCode() == KeyEvent.VK_C 
        && (ev.getModifiers() & KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK) { 
       JEditorPane editorPane = (JEditorPane) ev.getComponent(); 
       int caretPos = editorPane.getCaretPosition(); 
       try { 
        editorPane.getDocument().insertString(caretPos, 
          "desired string", null); 
       } catch (BadLocationException ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } 
    }); 
    frame.add(editorPane); 
    frame.pack(); 
    frame.setVisible(true); 
} 

}

+0

: 여기

if (e.getKeyCode() == KeyEvent.VK_C && (e.getModifiers() & KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK) { JEditorPane editorPane = (JEditorPane) e.getComponent(); int caretPos = editorPane.getCaretPosition(); try { editorPane.getDocument().insertString(caretPos, "desired string", null); } catch(BadLocationException ex) { ex.printStackTrace(); } } 

전체 예입니다 :이 상황에서 키 이벤트는 편집기 창에서 유래 한 수 있음을 알고 있다면 당신은 다음과 같은 뭔가를 할 수 디버거에서 실행했을 때 KeyEvent를 포착하고 keyPressed() 메서드로 갔지만 아무 것도하지 않았으므로 오류가 발생하지 않았습니다. 나는 당신이했던 것처럼 새로운 인스턴스를 만드는 대신 프로그램의 시작 부분에서 초기화 한 전역 JEditorPane을 사용했습니다. 왜 아직도 아무 것도하지 않을 수도 있다는 것을 아십니까? – ridecontrol53

+0

메모리에서 코딩 할 때 발생하는 문제입니다. 수정 자에 대한 상수를 잘못 지정했습니다. 현재 사용중인 수정자를 사용하면 수정자가 작동합니다. – Sticks

+0

고마워요. 훌륭하게 작동합니다. 그것은 전부'keyPressed()'메쏘드를 어떻게'addKeyListener()'에 넣는 지 이상하게 들립니다. – ridecontrol53

관련 문제