13

私はオンラインで検索し、e.consume() の使用について明確な説明を得ることができません。これは Java KeyEvent Handle.Like でよく使用されます。

public void keyTyped( KeyEvent e ) {
    char c = e.getKeyChar();
    if ( c != KeyEvent.CHAR_UNDEFINED ) {
        s = s + c; 
        repaint();
        e.consume();
    } 
}
4

5 に答える 5

8

JavaDocsから

このイベントを消費して、それを発生させたソースによってデフォルトの方法で処理されないようにします。

基本的に、それが意味することは、イベントがディスパッチされたり、それ以上のイベント リスナーによって処理されたりしたくないということです。

ただし、一般的に言えば、これは個々のリスナーの実装に依存します

于 2012-09-23T07:36:29.153 に答える
3

ドキュメントを見てください:InputEventクラスからメソッドをKeyEvent継承します。消費メソッドは、このイベントを消費して、それを発生させたソースによってデフォルトの方法で処理されないようにしますconsume

于 2012-09-23T07:33:26.147 に答える
3

KeyListeners消費関数は、特定の種類のイベントが発生している間、コードを処理しない責任があります。例:数字が押されたときにのみ応答するようにJavaで作成したい場合textfield、consumeメソッドを使用して消費することができます(数字が押されたために発生しなかったキーイベントを処理しません)そのようなイベント。

于 2012-09-23T07:36:32.467 に答える
2

AWTEventクラスのメソッドです。thisイベントを消費できる場合は、イベントを消費するために使用されます。

チェックしましたAWTEvent.consume()か?

さらに、consume() はどのように機能しますか?を参照してください。正確に消費することについての説明のために。

于 2012-09-23T07:33:08.917 に答える
0

イベントが消費されると、イベントのソース (キーが入力されたときにフォーカスがあった JTextField など) はイベントを無視します。

クラスのprocessKeyEventメソッドを見ると:JComponent

protected void processKeyEvent(KeyEvent e) {
    boolean result;
    boolean shouldProcessKey;

    // This gives the key event listeners a crack at the event
    super.processKeyEvent(e);

    // give the component itself a crack at the event
    if (! e.isConsumed()) {
        processComponentKeyEvent(e);
    }

が最初に呼び出されていることがわかりますsuper.processKeyEvent(e)。これにより、 に登録されたリスナーにイベントがディスパッチされcomponent.addKeyListener()ます。リスナーは最初に登録された順序で通知され、そのうちの 1 つがイベントを消費した場合でも、すべてのリスナーに通知されます。残りのリスナーによるイベントの処理を停止できる唯一のものは、キャッチされない例外です。

リスナーに通知された後、コンポーネント自体がイベントを処理しますが、それはリスナーのいずれかによって消費されていない場合のみです。JTextField の場合、リスナーがキー型イベントを消費した場合、フィールドは更新されません (ただし、キーが押されたイベントを消費しても効果はありません)。

マウス イベントの動作は異なることに注意してください。いずれかのリスナーによって消費されるイベントは、コンポーネントによって引き続き処理されます。

于 2021-06-07T08:18:40.247 に答える