2

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

4

4 に答える 4

5

Swingの場合は、制御するボタンを配列またはに配置することをお勧めしますArrayList<AbstractButton>。このようにして、コントロールボタンのActionListenerは、ボタンでforループを呼び出しsetEnabled(true)たり、falseを呼び出したりして、配列またはコレクションを単純に反復処理できます。制御ボタンをJCheckBoxまたはJToggleButtonにすることを検討してください。

JToggleButtonを使用する場合は、それにItemListenerを追加することに注意してください。その場合、ブール値を使用する必要はありません。ItemListenerのitemStateChangedメソッドに渡されたItemEventの状態を確認するだけです。getStateChanged()ItemEvent.SELECTEDが返される場合は、JButtonコレクションを繰り返し処理して、すべてのボタンを有効にします。ItemEvent.DESELECTEDが返される場合は、逆の操作を行います。

バイロンホーキンスのコメントによると、次の点にも注意してください。

ItemListenerボタンがプログラムで切り替えられたとき、およびユーザーがボタンを切り替えたときに、がイベントを受信することを検討することをお勧めします。人間のActionListenerユーザーからの入力でのみ起動されます。間違ったものを選んだので、私はしばしばバグを抱えていました。

于 2013-02-14T02:50:02.900 に答える
1

ボタンが押されてもポップアップしない場合は、のバージョンをJToggleButton呼び出さずに のメソッドをオーバーライドした可能性があります。superメソッドをオーバーライドする代わりに、 を作成しActionListenerて使用addActionListener()し、ボタンにアタッチします。ボタン アクションがリスナーに通知されたら、トグル ボタンが上か下かを確認setEnabled()し、それに応じて他のボタンをオンにします。

于 2013-02-14T02:53:11.343 に答える
1

この単純なコードを使用してみてください。変数をフラグとして使用してください

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");
    }
}
于 2013-02-14T02:53:22.740 に答える
1

ボタンの状態を表すブール値が必要です。

つまり、ボタンがオフの場合 (boolean 変数が false)、onClick リスナーからメソッド「turnButtonOn()」などを呼び出します。

ブール変数が true の場合、メソッド turnButtonOff() を呼び出します。

public void onClick() {
    if(buttonOn){
      turnOff();
    }
    else {
      turnOn();
    }
    buttonOn = !buttonOn;
}
于 2013-02-14T02:56:08.873 に答える