2011-01-18 31 views
1

「マクロシステム」を持つテキストエディタの開発中です。ユーザーは再割り当てできますキーボードのキーに値を入力すると、文字aを押すと文字「z」が表示されることがあります。 (本当に、それは数学記号に使われ、他の文字には使われません)。新しい「文字」をキーに割り当てて、キーのデフォルトの文字の代わりに印刷するようにします。

JTextPane内のキーに値を再割り当てするJavaコードを誰かから開始できますか?

詳細が必要な場合は、お知らせください。

ありがとうございました!私は、マクロを「作成」マクロが存在するかどうかをチェックして、それを実装する方法に取り組んでいます

public void keyPressed(KeyEvent evt) { 
//Called when a key is pressed. 

//Intercept the key before the default value is printed. 
//1. Suppress the original character. Do this in the KeyEvent object 
//by setting the doit property to false in your listener if the key 
//matches a macro. 

    jTextPane1.addKeyListener(new KeyAdapter() { 
public void keyPressed(keyEvent event) { 
if (event.getKeyCode() == KeyEvent.VK_A) { 
//Perform an action when A is pressed and there is a macro. 
if(macroA == true) 
{ 
    keyPressed.doit() = false; 
} 
} 
} 
else if (event.getKeyCode() == KeyEvent.VK_B) { 
//Perform an action when B is pressed if there is a macro. 
if(macroB == true) 
{ 
    keyPressed.doit() = false; 
} 
} 
} 
}); 


はこれまでのところ、これは私が持っているものです。

これ以上のアドバイスがありましたら、感謝します。

ありがとうございます。

+1

KeyListenersは、古いAWTアプリケーションで使用されます。 Swingにはこれ以上のサポートがあり、KeyListenersを使用しないでください。 – camickr

答えて

3

私はしばらくの間、スイング開発を行っていませんが、KeyListenerを探していると思います。 ここに例があります:http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

バックエンドでは、キー入力をマクロにマップし、キー入力を傍受して代わりにマクロを挿入する必要があります。

+0

また、元の文字を非表示にする必要があります。キーがマクロに一致する場合、リスナーでdoitプロパティをfalseに設定することで、KeyEventオブジェクトでこれを行います。 –

+0

誰も私にキー入力のマッピングのコード例を教えてもらえますか?それは今のところ私が立ち往生している場所のようです。 –

+0

上記にリンクされたチュートリアルには、JNLPを使用して試すことができるサンプルコードがあります。修飾子(CTRLなど)を含むキーの押下を示します。もっと具体的なものはありますか? –

2

あなたは、あなたが

a)は、テキスト・ペイン Bにテキストを表示するコードを書き換える)を挿入する(私は考えることができることを)2つのオプションがあり、テキストペインに表示される文字を変更したい場合異なる文字をドキュメントに貼り付けることで、文字が塗りつぶされるようになります。

オプション2は簡単です。

単純な1対1のキーマッピングでは、DocumentFilterを使用できます。

さらに複雑なキーマッピングの場合、Ctrl + 1を使用して特殊文字を入力する場合は、KeyBindingsを使用します。

Swing tutorialには、これらのアプローチの両方に関するセクションがあります。 「テキストコンポーネントの機能」および「キーバインディングの使用」を参照してください。

+0

+1。ほとんどの複雑なケースでは、DocumentFilterを使用するのではなく、insertString()/ remove()のようなDocumentのメソッドをオーバーライドしますが、通常はcamickrの提案で十分です。 – StanislavL

+0

@StanislavL、カスタムドキュメントを作成するのはなぜですか?次に、コードはあなたがターゲットとするテキストコンポーネントに対してのみ機能します。 DocumentFilterが存在する場合は、DocumentFilterをすべて通過すると私は理解しています。 DocumentFilterを使用する理由は、JTextField、JTextArea、JTextFieldで同じクラスを使用できるようにするためです。それは問題の要件ではありませんが、ソリューションをより再利用可能にします。 – camickr

関連する問題