押すと他のすべてのボタンが有効になり、ラベルの名前が「オフ」から「オン」に変更され、もう一度押すとすべてのボタンが無効になり、スイッチが再び「オフ」に戻るボタンが必要です、オン/オフスイッチのように。問題は、「オン」にすることはできますが、オフに戻すことはできません。
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;
}