スイッチ回路のシミュレーション

  1. 目的
    簡単なスイッチ回路の動作をアプレットとシミュレーションしてみましょう。スイッチの替わりにラジオボタンを配置します。ラジオボタンのオン・オフでグラフィックのランプの色を変更します。
  2. 階段スイッチ回路
    次の図は階段の上下に設置し、一つの電球を点滅する回路です。一方のスイッチのみでも電球を点滅できるし、一方のスイッチで点灯し他方のスイッチで消灯することもできます。ただし、他方のスイッチの状態で点灯(または消灯)するスイッチの方向は変化します。たとえば、スイッチS2がオフなら、S1もオフのとき電球は点灯します。
    1. 階段スイッチ

    2. 等価な回路
      この回路は次の回路と等価です。


  3. プロジェクト
    1. GUI設計
      スイッチの替わりにラジオボタンを左右に配置します。後の配線、ランプなどは、グラフィックで表示します。ボタンの名前をA,Bに変更します。ラジオボタンの設定は、まず、チェックボックスを配置し、これを、checkBoxGroupでグループを設定します。同じグループに設定されたチェックボックスは、クリックされたcheckBoxのみがオンとなり他のboxは自動的にオフになります。
    2. プログラム
      paint()関数を追加します。配線、スイッチの接点、電池、ランプを表示します。座標の決定がちょっと面倒ですが、ラジオボタンの座標は Jbinit()に生成されている
       checkbox1.setBounds(new Rectangle(69, 50, 38, 25));
      から、知ることができます。checkbox1.getState()で、左のボタンの値を知りこれをswaとします。同様に、右のボタンの値をswbに求めます。swa,swbから、ランプ:lampの値を
       lamp=swa&&swb || (!swa)&&(!swb);
      で、求めることができます。&&が論理積、||が論理和、!が論理否定です。lampの値から、色を設定し、ランプを塗りつぶします。
        public void paint(Graphics g){
          Color cRed=new Color(255,0,0);
          Color cBlack=new Color(0,0,0);
          //g.setColor(cBlack);
          g.drawOval(30,60,15,15);//left sw
          g.drawOval(260,60,15,15);//right sw
          g.drawRect(100,120,40,20);//batt
          g.drawOval(170,120,20,20);//lamp
          g.drawLine(140,130,170,130);//botom
          g.drawLine(20,130,100,130);
          g.drawLine(190,130,295,130);
          g.drawLine(295,130,295,67);//down
          g.drawLine(20,130,20,67);//up
          g.drawLine(20,67,30,67);
          g.drawLine(295,67,275,67);
          g.drawLine(80,62,204,62);//top
          g.drawLine(80,85,204,85);
          boolean swa=checkbox1.getState();
          boolean swb=checkbox3.getState();
      
          boolean lamp=swa&&swb || (!swa)&&(!swb);
      
          //System.out.println("swa:"+swa+" swb:"+swb);
          if(lamp) g.setColor(cRed);
          else g.setColor(cBlack);
          g.fillOval(170,120,20,20);
        }
      あとは、各チェックボックスに対するイベント処理を付加します。処理はすべてpaint()で行いますから、再描画をするrepaint()を呼び出せば良いのです。ただし、各チェックボックスをダブルクリックすると、4個のメソッド(関数)を作成してしまいます。
       checkBoxを選択し、イベントに切り替えて、[itemStateChanged]をクリックしたとき、生成されるメソッドの名前を、同じ名前(checkbox_itemStateChanged)に変更すると、メソッドは一つしか生成されません。

  4. 実行
    チェックボックスをスイッチとみなして、クリックします。左右のボタンを共にON(上のチェック)またはOFF(下のボックス)とすれば、ランプが赤く点灯します。



  5. ダウンロード
    このプロジェクトをダウンロードできます。次の行をクリックして、switch.exeファイルを適当なフォルダに保存します。
    ダウンロード開始
    このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。