ボタンを増やす

RGB3色に

緑だけの配色でしたが,赤と青を加えて変化をつけます。

EventRandom

JPanelにボタンを配置

ボタンを3つにしました。いままでBorderLayout()やGridLayout()を使ってきましたが, 今回はひとつのレイアウトマネージャーでやるのは面倒です。

JavaではJPanelなどにボタンやラベルを配置することができます。そこで3つのボタンをJPanelにならべて, それをMyPanelと組み合わせることにします。

EventRandom

JPanelは特に大きさを指定していませんが中に入れたボタンの大きさとそのレイアウトにしたがって自動で細長くなります。

ファイル名 EventRandomRGB.java の一部

    public EventRandomRGB() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("イベントで変化する模様");
        mypnl = new MyPanel(400,300);
        rbtn = new JButton("red");
        gbtn = new JButton("green");
        bbtn = new JButton("blue");
        JPanel btnpnl = new JPanel();
        btnpnl.setLayout(new GridLayout(1,3,0,0));
        btnpnl.add(rbtn);
        btnpnl.add(gbtn);
        btnpnl.add(bbtn);
        setLayout(new BorderLayout());
        add(mypnl, BorderLayout.CENTER);
        add(btnpnl,BorderLayout.SOUTH);
        rbtn.addActionListener(this);
        gbtn.addActionListener(this);
        bbtn.addActionListener(this);
        pack();
        setVisible(true);

mybtn の代わりに rbtn など3つのボタンをフィールドで宣言する必要があります。btnpnl の名前はコンストラクタ以外では使わないのでコンストラクタないで宣言しています。

上記の様にActionListenerも必要です。

イベント

ボタンを3つにしましたのでそれぞれに何をするかをかきます。

ファイル名 EventRandomRGB.java の一部

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == rbtn) {
            mypnl.drawToBuff('r');
        }
        if (e.getSource() == gbtn) {
            mypnl.drawToBuff('g');
        }
        ................

色を塗る

3つのアクションにしたがって,それぞれの色で描くようにします。

drawToBuff()メソッドの最初の部分です。引数としてchar変数をうけます。あまり美しくはありませんがこれはそのままrandomColor(rgb);としてrandomColor()を呼び出します。

ファイル名 EventRandomRGB.java の一部

       public void drawToBuff(char rgb) {
          for(int i=0; 10>i; i++){
                Color rcolor = randomColor(rgb);
                bfg.setColor(rcolor);

randomColor()メソッドの最初の部分です。これも引数としてchar変数をうけます。こちらの変数も同じ名前(rgb)ですが、randomColor()で宣言されているので別の変数として取り扱われます。

いままで緑成分を乱数で出していましたが、xに乱数をいったん入れて、rgbの値によってこれを赤緑青のどれかにしています。

ファイル名 EventRandomRGB.java の一部

       public Color randomColor(char rgb){
          int r=0;
          int g=0;
          int b=0;
          int dc=256;
          int x = (int)(dc*Math.random());
          if (x > 255){
             x = 0;
           }
          if (rgb=='r') r=x;
          if (rgb=='g') g=x;
          if (rgb=='b') b=x;
          Color c = new Color(r,g,b);
          return c;
       }

課題

上記プログラムをつくって動作を確認しなさい。

ファイル名 EventRandomRGB.java

もくじ

Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Oct.2010 Oct.2012