PaintTool.java
import java.awt.*;
import java.awt.event.*;
/** 描画用のキャンバスを配置する PaintTool クラス */
public class PaintTool {
/** 起動時に呼び出されるメソッド */
public static void main( String argv[] ) {
Frame frame = new Frame("Paint Tool"); //フレームの生成
Panel panel = new Panel(); //パネルの生成
WhiteBoard canvas = new WhiteBoard(); //キャンバスの生成
canvas.setBackground( Color.white );
WhiteBoardAdapter adapter = new WhiteBoardAdapter( canvas );
canvas.addMouseListener( adapter );
canvas.addMouseMotionListener( adapter );
Button clearButton = new Button( "Clear" ); //クリアボタンの生成
panel.add( clearButton );
clearButton.addActionListener( adapter );
Color color[];
color = new Color[8];
color[0] = Color.red; color[1] = Color.orange;
color[2] = Color.yellow; color[3] = Color.green;
color[4] = Color.cyan; color[5] = Color.blue;
color[6] = Color.magenta; color[7] = Color.black;
canvas.penColor = color[7];
Checkbox[] colorBox = new Checkbox[8]; //色選択ボタンの生成
CheckboxGroup palette = new CheckboxGroup(); //グループ化する
for( int i=0; i<8; i++ ) {
colorBox[i] = new Checkbox();
colorBox[i].setCheckboxGroup( palette );
colorBox[i].setBackground( color[i] );
if( i == 7 ) colorBox[i].setState( true );
else colorBox[i].setState( false );
panel.add( colorBox[i] );
colorBox[i].addItemListener( adapter ); //アダプタの登録
}
palette.setSelectedCheckbox( colorBox[7] );
canvas.setSize( 400, 300 );
frame.add( "Center", canvas );
panel.setSize( 400, 40 );
frame.add( "South", panel );
frame.pack();
frame.setSize( 400, 340 );
frame.show();
}
} // PaintToolクラスの定義の終わり
/** 描画可能なキャンバス WhiteBoard クラス */
class WhiteBoard extends Canvas {
/** 描画に利用する色 */
protected Color penColor;
/** 描画される線の座標値 */
protected int x1,y1,x2,y2;
/** 画面をクリアするかどうかのフラグ */
protected boolean clearFlag = false;
/** コンストラクタ */
WhiteBoard(){
super(); // Canvas のコンストラクタ
penColor = Color.black;
}
/** アプレットにグラフィックを描く。repaint() によって呼び出される。*/
public void update( Graphics g ) {
if( clearFlag ) {
g.setColor( Color.white );
g.fillRect( 0, 0, getSize().width, getSize().height );
clearFlag = false;
}
else {
g.setColor( penColor );
g.drawLine( x1, y1, x2, y2 ); // 線を描く
x1 = x2;
y1 = y2;
}
}
} // WhiteBoardクラスの定義の終わり
/** ボタンのアクションを処理する WhiteBoardAdapterクラス */
class WhiteBoardAdapter implements ActionListener, ItemListener,
MouseListener, MouseMotionListener {
/** 描画したいキャンバス */
public WhiteBoard canvas;
/** コンストラクタ */
WhiteBoardAdapter( WhiteBoard canvas ){
this.canvas = canvas;
}
/** クリアボタンのアクション処理のメソッド */
public void actionPerformed( ActionEvent evt ) {
canvas.clearFlag = true;
canvas.repaint();
}
/** 色選択ボタンのアクションの処理のメソッド */
public void itemStateChanged( ItemEvent evt ) {
Color color = ( (Checkbox)evt.getSource() ).getBackground();
canvas.penColor = color;
}
/** マウスイベント処理のメソッド */
public void mousePressed( MouseEvent evt ) {
canvas.x1 = evt.getX();
canvas.y1 = evt.getY();
}
public void mouseDragged( MouseEvent evt ) {
canvas.x2 = evt.getX();
canvas.y2 = evt.getY();
canvas.repaint(); // 操作対象のコンポーネントの再描画
}
public void mouseEntered( MouseEvent evt ) {
}
public void mouseExited( MouseEvent evt ) {
}
public void mouseReleased( MouseEvent evt ) {
}
public void mouseClicked( MouseEvent evt ) {
}
public void mouseMoved( MouseEvent evt ) {
}
} // WhiteBoardAdapterクラスの定義の終わり