2009-09-15 6 views
24

マウスをクリックしたときにJRadioButtonが「未選択」から「選択済み」に変更されたときを検出するにはどうすればよいですか?私はボタンでActionListenerを使用しようとしましたが、ラジオボタンがクリックされるたびに起動されます。状態が「選択済み」に変更されたときだけではありません。JRadioButtonの状態の変化を検出する

ボタンの状態を覚えているブール変数を維持し、その状態を変更するかどうかを確認するためにActionListener内でテストすることを考えましたが、はるかに優れた、またはよりクリーンなソリューションがあるかどうか疑問です。

+0

はい、通常、ActionListnerが実行されます。誰もがとても一般的なので、ActionListenerを書く方法を知っています。コードは単にボタンのisSelected()メソッドを使用するだけです。 ItemListenerは複数回も発生しますので、ItemEventをチェックしてこのイベントが選択されたかどうかを確認する必要があります。私はより一般的なアプローチに固執します。 – camickr

+0

このようなActionListenerを使用しても、isSelected()はラジオボタンがクリックされるたびにtrueを返します。これは私の最初の問題です。 – cgull

+0

XPでJDK6を使用しても問題なく動作します。 ChangeListenerが状態が変化したことを通知した場合は、状態をよりよく変更するか、大きな問題があります。問題を示すSSCCEを投稿してください。 – camickr

答えて

40

JRadioButtonをご覧ください。 addItemListener()

EDIT:changeListenerをクリックごとに複数回起動するので、これを使用することはほとんどありません。 itemListenerは1回のクリックで1回だけ発生します。 See here

EDIT2:これを拡張するだけで、jradioButtonのactionListenerは、すでに選択されていてもユーザーがクリックするたびに発生します。それがあなたが望むものなら、それは迷惑だと思う。私はそれが選択されているか選択解除されていることを通知されたいだけです。

ChangeListenerはすべての種類のイベントに対して起動します。つまり、リスナーは1回のクリックで5つ以上のイベントを受信します。良くない。

選択または選択解除された状態が変更された場合、itemlistenerはのみを発生させます。これは、ユーザーが複数回クリックすることができ、変更されなければ起動しないことを意味します。あなたが方法であるならば、ラジオボタンは、どちらか持っていることを知っているので、それはちょうど良い作品

@Override 
public void itemStateChanged(ItemEvent e) { 
    if (e.getStateChange() == ItemEvent.SELECTED) { 
     // Your selected code here. 
    } 
    else if (e.getStateChange() == ItemEvent.DESELECTED) { 
     // Your deselected code here. 
    } 
} 

:あなたのハンドラメソッドでは、SELECTEDDESELECTED状況をチェックifブロックを持っており、そこに何でもする必要があります選択されているか選択解除されているだけで、ユーザが何らかの不明な理由でインタフェースを叩いているだけではありません。

+2

これは完全に動作します。Sunのマニュアルには「通常、アクションリスナーを使用してラジオボタンのクリックを処理します。ありがとう! – cgull

+0

グループ内の 'JRadioButton'の変更時に一度だけ起動する' ButtonGroup'にリスナーを追加することができれば、本当に素晴らしいことです。 – ryvantage

+0

@Nemi申し訳ありませんが、編集リンクが死んでいます。このアプローチの使い方を教えてください。 –

0

ChangeListenerの実装を追加したいと思います。

+0

私の記事で言及したように、ChangeListenerを追加すると、1回のクリックで複数の回数が発生し、最適な選択肢はありません。 – Nemi

+0

はい、マウスをクリックしなくても "the territory"に入ったときに起動します... – FaithReaper

関連する問題