0

CTRL+C が押されたときに、特定の文字列を JEditorPane の現在のキャレット位置に出力しようとしています。2 つのキー イベントを処理して現在のキャレット位置に出力する方法がわかりません。API は、API を適切に記述していません。私はそれが次のようになると思います:

@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

1 に答える 1

4

そのイベントの keyChar は、VK_CONTROL と VK_C の両方に同時に等しくなることはありません。あなたがしたいことは、イベントの修飾子として CONTROL キーをチェックすることです。エディター ペインにテキストを挿入または追加する場合は、テキストを含む下層の Document オブジェクトを取得し、そこにテキストを挿入することをお勧めします。このコンテキストのキー イベントがエディタ ペインからのみ発生した可能性があることがわかっている場合は、次のようなことができます。

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

完全な例を次に示します。

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

}

于 2012-07-16T16:40:04.113 に答える