2017-10-27 4 views
-1

いくつかのチェックボックスがあり、選択されているものがあれば何かをしたい(たとえば、画面にラベルを表示する)。私はこの本を読んでおり、次のコードを示唆していますが、コンパイラは "checkBoxを変数に解決できません"というエラーを出します。JAVA GUI - itemStateChanged

質問1 - どうすればこの問題を解決できますか? 質問2 - ItemEventオブジェクトのgetItemメソッドとgetSourceメソッドの違いは何ですか? (どこで使う?)。

public void itemStateChanged(ItemEvent ie) { 
    if(ie.getItem() == checkBox)) { //the book's suggestion but it doesn't work 
     if(ie.getStateChange() == ItemEvent.SELECTED) { 
      // statements that execute when the box is checked 

     } else { 
       // statements that execute when the box is unchecke 

     } 


    } else { 
      // statements that execute when the source of the event is 
      // some component other than the checkBox object 
    } 

} 

答えて

0

質問1 - どのように私はこの問題を解決することができますか?

状態ie.getItem() == checkBoxは、状態が変更された項目が、コードを作成した例の中の特定のチェックボックスであるかどうかをテストするためのものです。 checkBoxのチェックボックスに置き換えてください。そのような参照がすでにスコープ内に存在しない場合は、1つの参照を配置する必要があります。

質問2からItemEventオブジェクトのgetItemgetSource方法の違いは何ですか? (どこで使う?)。

getSource()は、イベントを発生させたComponentへの参照を返します。 getItem()は[de]が選択されたアイテムへの参照を返します。チェックボックスや他の種類のボタンの場合、これらは同じオブジェクトになりますが、例えば、java.awt.Listのような他の種類のウィジェットでは、それらは異なるでしょう。リスナーとそのリスニング先のオブジェクトに適したものを使用します。

または、特定の用途に合わせてカスタマイズされたリスナーをお持ちの場合は、どちらかを使用する必要はありません。

+0

ありがとうございます。質問1の場合、特定のチェックボックスボタンのどれが選択されていても(すべてのチェックボックスを1つずつテストしたくないと仮定して)、チェックボックス(任意の私たちの興味のある行為が行われますか? –

+0

@MehrdadFarsadyarというものは何も言いませんでした。いくつかのチェックボックスのどれが絡み合っていても、同じアクションを実行したい場合、最も簡単なのは、リスナーをこれらのチェックボックスにのみ追加してから、アイテムのチェックを一切スキップすることです。リスナーは、それが登録されているウィジェットからのみイベントを受け取ります。 –