スクロールバーの利用(色を作成)


スクロールバーを使い色を変化さす。
テキストボックスに 0〜255の数値を入力し,[Enter]キーでもよい。

Java Appletです


ソースコード

import java.applet.Applet;
import java.awt.*;

public class ja52 extends Applet
{
  Scrollbar sRed,sGreen,sBlue;			//3個のスクロールバー
  Label lRed,lGreen,lBlue;			//3個のラベル
  TextField tfR,tfG,tfB;			//3個のテキストフィールド
  Panel PL1,PL2,PL3;				//3個のパネル
  int nR,nG,nB;					//Red,Green,Blueの色の値

  public void init(){
    sRed=new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,255);	 //3個のスクロールバーの作成と設定
    sGreen=new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,255);
    sBlue=new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,255);
    sRed.setPageIncrement(15);		//Scrollbarのつまみ(バブル)の右/左がクリックされた時の増減値を15に
    sGreen.setPageIncrement(15);
    sBlue.setPageIncrement(15);

    lRed=new Label("Red 128",Label.RIGHT);	//3つのラベルを作成し,テキストは右配置に
    lGreen=new Label(" Green 128 :",Label.RIGHT);
    lBlue=new Label(" Blue 128 :",Label.RIGHT);

    tfR=new TextField("128",5); 		//3個のTextFieldを作成
    tfG=new TextField("128",5);
    tfB=new TextField("128",5);

    PL2=new Panel();				//パネル2の作成
    PL2.setLayout(new GridLayout(3,2));		//3行2列の配置
    PL2.add(lRed);				//パネル2にラベルとテキストフィールドを配置
    PL2.add(tfR);
    PL2.add(lGreen);
    PL2.add(tfG);
    PL2.add(lBlue);
    PL2.add(tfB);
    PL3=new Panel();				//パネル3の作成
    PL3.setLayout(new GridLayout(3,1));		//3行1列の配置
    PL3.add(sRed);				//パネル3のスクロールバーを配置
    PL3.add(sGreen);
    PL3.add(sBlue);

    PL1=new Panel();				//パネル1の作成
    PL1.setLayout(new GridLayout(1,2));		//1行2列の配置
    PL1.add(PL2);				//パネル1にパネル2とパネル3を配置
    PL1.add(PL3);

    setLayout(new BorderLayout());		//アプレットにBorderLayoutを設定
    add("North",PL1);				//パネル1を上部(North)に配置する
  }

  public void paint(Graphics g){
    nR=sRed.getValue();				//スクロールバーから現在の値を取得する
    nG=sGreen.getValue();
    nB=sBlue.getValue();

    g.setColor(new Color(nR,nG,nB));  		//取得した値から色を作成
    g.fillRect(120,80,200,70);			//塗り潰された四角形を描く
  }

  public boolean handleEvent(Event e){		 //スクロールバーのイベント処理
    switch(e.id){
    case Event.SCROLL_LINE_UP:
    case Event.SCROLL_LINE_DOWN:
    case Event.SCROLL_PAGE_UP:
    case Event.SCROLL_PAGE_DOWN:
    case Event.SCROLL_ABSOLUTE:
				//スクロールバーで何らかのイベントが発生した場合,getValueで値を取得
	if(e.target==sRed){					   
	  nR=sRed.getValue();
	  lRed.setText("Red "+nR+":");			//ラベルの内容を変更
	  tfR.setText(String.valueOf(nR));		//テキストフィールドの値も変更
	}else if(e.target==sGreen){
	  nG=sGreen.getValue();
	  lGreen.setText("Green "+nG+":");
	  tfG.setText(String.valueOf(nG));
	}else if(e.target==sBlue){
	  nB=sBlue.getValue();
	  lBlue.setText("Blue "+nB+":");
	  tfB.setText(String.valueOf(nB));
	}
	repaint();			//paintメソッドを呼び出し,四角形を再描画する
	break;
    }
    return super.handleEvent(e);
  }

  public boolean action(Event evt,Object o){			
    if(evt.target instanceof TextField){		 //テキストフィールドのイベント処理
      if(evt.target == tfR){
	nR = Integer.valueOf(tfR.getText()).intValue();	//値を取得
	nR = Math.max(0,Math.min(255,nR));		//値が0〜255の範囲になるように
	sRed.setValue(nR);				//値をスクロールバーに反映する
	lRed.setText("Red "+nR+":");			//ラベルの文字も変更
      }else if(evt.target == tfG){
	nG = Integer.valueOf(tfG.getText()).intValue();
	nG = Math.max(0,Math.min(255,nG));
	sGreen.setValue(nG);
	lGreen.setText("Green "+nG+":");
      }else if(evt.target == tfB){
	nB = Integer.valueOf(tfB.getText()).intValue();
	nB = Math.max(0,Math.min(255,nB));
	sBlue.setValue(nB);
	lBlue.setText("Blue "+nB+":");
      }
      repaint();				//テキストフィールドの入力値により再描画
      return true;
    }
    return false;
  }
}

末尾