押すと他のすべてのボタンが有効になり、ラベルの名前が「オフ」から「オン」に変更され、もう一度押すとすべてのボタンが無効になり、スイッチが再び「オフ」に戻るボタンが必要です、オン/オフスイッチのように。問題は、「オン」にすることはできますが、オフに戻すことはできません。
4 に答える
Swingの場合は、制御するボタンを配列またはに配置することをお勧めしますArrayList<AbstractButton>
。このようにして、コントロールボタンのActionListenerは、ボタンでforループを呼び出しsetEnabled(true)
たり、falseを呼び出したりして、配列またはコレクションを単純に反復処理できます。制御ボタンをJCheckBoxまたはJToggleButtonにすることを検討してください。
JToggleButtonを使用する場合は、それにItemListenerを追加することに注意してください。その場合、ブール値を使用する必要はありません。ItemListenerのitemStateChangedメソッドに渡されたItemEventの状態を確認するだけです。getStateChanged()
ItemEvent.SELECTEDが返される場合は、JButtonコレクションを繰り返し処理して、すべてのボタンを有効にします。ItemEvent.DESELECTEDが返される場合は、逆の操作を行います。
バイロンホーキンスのコメントによると、次の点にも注意してください。
ItemListener
ボタンがプログラムで切り替えられたとき、およびユーザーがボタンを切り替えたときに、がイベントを受信することを検討することをお勧めします。人間のActionListener
ユーザーからの入力でのみ起動されます。間違ったものを選んだので、私はしばしばバグを抱えていました。
ボタンが押されてもポップアップしない場合は、のバージョンをJToggleButton
呼び出さずに のメソッドをオーバーライドした可能性があります。super
メソッドをオーバーライドする代わりに、 を作成しActionListener
て使用addActionListener()
し、ボタンにアタッチします。ボタン アクションがリスナーに通知されたら、トグル ボタンが上か下かを確認setEnabled()
し、それに応じて他のボタンをオンにします。
この単純なコードを使用してみてください。変数をフラグとして使用してください
public int status = 0; //0 = on, 1=off
public void button_clicked()
{
//on button clicked
if(status == 0)
{
//logic here
status = 1;
buttonname.setText("Off");
}
//off button clicked
else if(status == 1)
{
//logic here
status = 0;
buttonname.setText("On");
}
}
ボタンの状態を表すブール値が必要です。
つまり、ボタンがオフの場合 (boolean 変数が false)、onClick リスナーからメソッド「turnButtonOn()」などを呼び出します。
ブール変数が true の場合、メソッド turnButtonOff() を呼び出します。
public void onClick() {
if(buttonOn){
turnOff();
}
else {
turnOn();
}
buttonOn = !buttonOn;
}