[描画方法] |
|
import java.applet.*;
import java.awt.*;
public class ja204 extends Applet
{
ja204Bar colorBar; //色パレットのインスタンス変数
ja204Bar2 toolBar; //描画ツールバーのインスタンス変数
int w,h; //Appletの幅と高さ
int startX,startY,endX,endY; //mouseDown,mouseUp時のX,Y座標
int dragX,dragY; //mouseDrag時のX,Y座標
boolean outcolorBar = false; //クリック位置が,色パレット/ツールバー内かどうかを判定する
boolean outtoolBar = false;
public void init(){
setBackground(Color.white); //Appletの背景色を白に
Dimension d = size(); //Appletのサイズを取得し,変数w,hに格納
w = d.width;
h = d.height;
colorBar = new ja204Bar(10,10,360,20); //色パレットを生成
toolBar = new ja204Bar2(10,35,360,20); //描画ツールバーを生成
}
public void paint(Graphics g){
update(g);
}
public void update(Graphics g){
colorBar.paint(g); //色パレットを描画する(class ja204Bar参照)
toolBar.paint(g); //描画ツールバーを描画する(class ja204Bar2参照)
int aW,aH; //四角形と円の描画時の,幅と高さ
if(outcolorBar && outtoolBar){ //MouseDown位置が色パレット/ツールバーの外の場合
g.setColor(colorBar.colors[colorBar.selectC]); //色パレットで現在選択されている色
if(startY < 65) startY = 65; //ツールバーより上部に描画できないようにする
if(endY < 65) endY = 65;
if(dragY < 65) dragY = 65;
if(toolBar.selectT == 0){ //ツールバーで[直線]が選択されている場合
g.drawLine(startX,startY,endX,endY);
g.setColor(Color.black);
g.drawString(startX + ":" + startY,startX,startY);
g.drawString(endX + ":" + endY,endX,endY);
}
if(toolBar.selectT == 1){ //ツールバーで[四角形]が選択されている場合
g.setColor(Color.black);
g.drawString(startX + ":" + startY,startX,startY);
g.drawString(endX + ":" + endY,endX,endY); //直線を描画
if(endX < startX){ //mouseDown位置より左でmouseUpされて場合
aW = startX - endX;
startX = endX;
} else {
aW = endX - startX;
}
if(endY < startY){ //mouseDown位置より上でmouseUpされて場合
aH = startY - endY;
startY = endY;
}else{
aH = endY - startY;
}
g.setColor(colorBar.colors[colorBar.selectC]);
g.drawRect(startX,startY,aW,aH); //四角形を描画
}
if(toolBar.selectT == 2){ //ツールバーで[円形]が選択されている場合
if(endX < startX){ //mouseDown位置より左でmouseUpされて場合
aW = startX - endX;
startX = endX;
} else {
aW = endX - startX;
}
if(endY < startY){ //mouseDown位置より上でmouseUpされて場合
aH = startY - endY;
startY = endY;
}else{
aH = endY - startY;
}
g.drawOval(startX,startY,aW,aH); //円形を描画
}
if(toolBar.selectT == 3){ //ツールバーで[自由曲線]が選択されている場合
g.drawLine(dragX,dragY,startX,startY); //直線を描画
}
if(toolBar.selectT == 5){ //ツールバーで<部分クリア>を選択した場合
if(endX < startX){ //mouseDown位置より左でmouseUpされて場合
aW = startX - endX;
startX = endX;
} else {
aW = endX - startX;
if(endY < startY){ //mouseDown位置より上でmouseUpされて場合
aH = startY - endY;
startY = endY;
}else{
aH = endY - startY;
}
g.clearRect(startX,startY,aW,aH); //指定範囲をクリア(背景色で塗り潰す)
}
}
if(!outtoolBar && toolBar.selectT == 4){ //ツールバーで<全てクリア>を選択した場合
g.clearRect(0,56,w,h - 56); //描画領域全体ををクリア(背景色で塗り潰す)
}
}
public boolean mouseDown(Event evt,int x,int y){
//mouseDown位置が色パレット,描画ツールバー内かどうかを調べ,フラグ変数(outcolorBar,outtoolBar)
//に<true>か<false>かを設定。それにより動作を分岐さす。
startX = x;
startY = y;
if(colorBar.inside(x,y)){ //ja204Barクラスのinsideメソッドがtrueを返した場合
outcolorBar = false;
repaint();
return true;
}else{
outcolorBar = true;
}
if(toolBar.inside(x,y)){ //ja204Bar2クラスのinsideメソッドがtrueを返した場合
outtoolBar = false;
repaint();
return true;
}else{
outtoolBar = true;
}
return true;
}
public boolean mouseDrag(Event evt,int x,int y){
if(toolBar.selectT == 3){ //ツールバーで[自由曲線]が選択されている場合
dragX = x;
dragY = y;
repaint();
startX = x;
startY = y;
}
return true;
}
public boolean mouseUp(Event evt,int x,int y){
endX = x;
endY = y;
repaint();
return true;
}
}
class ja204Bar //色パレットを生成するクラス
{
int barX,barY; //色パレットの左上座標
int barW,barH; //色パレットの幅と高さ
int selectC = 0; //色配列で,現在選択されている色Index(デフォルトで赤を設定)
static Color colors[] = {Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.blue,Color.magenta,Color.cyan,Color.black};
public ja204Bar(int x,int y,int w,int h){ //コンストラクタを定義
barX = x; //色パレット全体の位置とサイズを得る
barY = y;
barW = w;
barH = h;
}
void paint (Graphics g){ //色パレットを描画する
int x,y,w,h; //色パレットの各色の左上座標と幅,高さ
for (int i=0;i<colors.length;i++){ //各色パレットを描画する
w = barW/colors.length;;
h = barH;
x = barX + (i * w);
y = barY;
g.setColor(Color.gray); //各色パレットの枠を作る
g.fillRect(x,y,w,h);
if(i == selectC){ //現在選択されている色の場合,枠を少し大きくする
x += 3;
y += 3;
w -= 6;
h -= 6;
}else{
x += 1;
y += 1;
w -= 2;
h -= 2;
}
g.setColor(colors[i]); //色配列にしたがい,各色パレットを作る
g.fillRect(x,y,w,h);
}
}
boolean inside(int x,int y){ //MouseDown位置を調べる
int i,w;
if(x < barX || x > barX + barW)return false; //色パレットの外の場合,falseを返す
if(y < barY || y > barY + barH)return false;
w = barW / colors.length; //色パレット内の場合
for(i = 0;i < colors.length;i+=1){
if(x <barX + (i + 1) * w){ //MouseDown位置のx座標が,どの色か調べる
selectC = i; //色Indexを設定
return true;
}
}
return false;
}
}
class ja204Bar2 //描画ツールを生成するクラス
{
int barX,barY; //ツールバーの左上座標
int barW,barH; //ツールバーの幅と高さ
int selectT = 0; //ツールボタンで,現在選択されているツール配列Index(デフォルトで直線を設定)
static String tool[] = {"直線","四角形","円形","自由曲線","全てクリア","部分クリア"};
public ja204Bar2(int x,int y,int w,int h){ //コンストラクタを定義
barX = x;
barY = y;
barW = w;
barH = h;
}
void paint (Graphics g){ //ツールバーを描画する
int x,y,w,h; //ツールバーの各ボタンの左上座標と幅,高さ
for (int i=0;i<tool.length;i++){ //ツールバーの各ボタンを描画する
w = barW/tool.length;;
h = barH;
x = barX + (i * w);
y = barY;
g.setColor(Color.gray);
g.fillRect(x,y,w,h);
if(i == selectT){ //選択されたツールバーボタンは,赤色で表示する
g.setColor(Color.yellow);
}else{ //その他は青色で表示する
g.setColor(Color.blue);
}
g.drawString(tool[i],barX + (i * w) + 3,barY + 16); //ボタン名を表示
}
}
boolean inside(int x,int y){ //MouseDown位置を調べる
int i,w;
if(x < barX || x > barX + barW)return false; //ツールバーの外の場合,falseを返す
if(y < barY || y > barY + barH)return false;
w = barW / tool.length; //ツールバー内の場合
for(i = 0;i < tool.length;i+=1){
if(x <barX + (i + 1) * w){ //MouseDown位置のx座標が,どのツールか調べる
selectT = i; //ツールIndexを設定
return true;
}
}
return false;
}
}
末尾