2

通常の MVC Swing コンポーネントの作成を試み始めました。私は M と C には何の問題もありませんが、V は私が通常解決できない問題を 1 つ投げかけました。問題は、Controller がコンポーネント (MyComponent など) のメイン クラスであり、JComponent を拡張していることです。View は ComponentUI クラスから拡張された ui デリゲート (MyCompanentUI) です。デリゲートが行うことは、MyCompanent に JTextField を追加し、MyComponentModel とこのフィールドの間のデータ バインディングを提供することだけです。それはうまく動作します。しかし、JTextField から MyComponent にイベントをバインドするにはどうすればよいでしょうか? ユーザーがいくつかのイベントを処理したい場合、リスナーを MyComponent に追加しますが、すべての実際のイベント (マウス、フォーカス、キーなど) は JTextField によってインターセプトされ、ユーザーはそれについて実際には知りません。これを行う通常の方法はありますか?イベントをキャッチして手で元のコンポーネントに変換する以外は? または、デリゲートを作成する別の方法がありますか?私は本当にそれをすべて間違っていますか?

更新:

ご回答ありがとうございます。しかし、私の心には別のことがありました。「inheritsPopupMenu」メソッドの場合のように、「イベント継承」のようなものについて話していました。キー、フォーカス、またはマウスイベントがコンポーネントに発生するように、それ自体を処理するのではなく、親コンポーネントに直接転送します。しかし、JSpinner にもまったく同じ問題があることに気付いたので、それは不可能に思えます。まさにこのコンポーネントからほとんどすべてのイベント通知を受け取ることができません。

4

1 に答える 1

2

独自のJComponentサブクラスを作成していて、カスタム UI デリゲートを許可したい場合は、Kirill Grouchnikov のHow to Write a Custom Swing Component から始めます。

JComponentなどの既存のサブクラスを含むコンポジットを作成している場合は、 How to Use Key BindingsJTextFieldで説明されている既存のActionインスタンスを利用できるかどうかを確認してください。は一例です。そのようなアクションの名前は、コンポーネントのソースから、または記事Key Bindingsにある@camickr の便利なユーティリティを使用して知ることができます。ScrollAction

于 2012-07-12T17:49:59.710 に答える