2016-12-15 5 views
0

現在、私は画面にチェックボックスを追加できる問題に直面しており、クリックするとステート間でスワップするが、選択データを使用して処理を行う場合は、それは真か偽かにかかわらず常に元の値を返します。JCheckBoxは常に真・偽を返すが変更しない

私の最初のコードスライスは、isSelected()を使用していました。メソッドを呼び出すことができます。 SVelRandは、私が使用して作成する私のチェックボックスです:

SVelRand = new JCheckBox("Random", true); 
    SVelRand.setBounds(50, 30, 90, 20); 

次にチェックコードは以下の通りです:

boolean sel = SVelRand.isSelected(); 

    if(sel){ 

     System.out.print("Selected"); 

    }else{ 

     System.out.print("Not Selected"); 


    } 

私は、これは動作しませんでした見つけたとき、私は私が作成した場所の下の項目リスナーを実装してみましたjcheckboxはまだ初期値のセットを返し続けます。

SVelRand.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent e) { 
      System.out.println(SVelRand.isSelected()); 
      } 
     }); 

また、ラベルとJTextFieldをベアリングのあるフレームに追加する前に同じパネルに描画します。そして、レイアウトではなくsetBoundsを使用している理由は、非標準のレイアウトを実現するために、各コンポーネントを正確な場所に追加できるからです。

何か助けていただければ幸いです。あなたは、デフォルトでチェックとして、あなたのチェックボックスのチェックを開始している場合は、あなたのアクションリスナー関数で

答えて

-1

だけ

// way up above everything 
public boolean toggleState=false; 

// then later 
SVelRand.addItemListener(new ItemListener() { 
public void itemStateChanged(ItemEvent e) { 
    this.toggleState=(!this.toggleState); 
    String message=(this.toggleState) ? "checked" : "unchecked"; 
    System.out.println("Checkbox is "+message); 
} 
}); 

ブール(クラススコープ)を追跡し、単に真

+0

おかげにtoggleStateの初期値を変更ヒープ、それは今素晴らしいです。依然として、組み込みのメソッドが機能していなかったが、このメソッドに固執しようとしている理由を私に混乱させました。 – user1690395

+0

なぜフィールドですか?不要な複雑さが増えています。必要な情報を保持しているので、ItemEventオブジェクトに保持されている状態をチェックしてみませんか? 'if(e.getStateChange()== ItemEvent.SELECTED)'がすべて必要です –

関連する問題