// //Created by 池浩一郎 //2016/07/01 // import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.*; public class Oekaki extends JFrame{ public Oekaki(){ setSize(700,700); setTitle("お絵描き"); setDefaultCloseOperation(EXIT_ON_CLOSE); MyJPanel myJPanel=new MyJPanel(); Container c=getContentPane(); c.add(myJPanel); setVisible(true); } public static void main(String[] args){ new Oekaki(); } public class MyJPanel extends JPanel implements MouseListener,MouseMotionListener,ActionListener{ /* ----- 宣言 ----- */ int x1,y1,x2,y2,flag; JSlider slider_R,slider_G,slider_B,slider_W; JLabel red,green,blue,width; JButton clearButton; Image img; int img_width,img_height; /* ----- コンストラクタ ----- */ public MyJPanel(){ x1=0; y1=0; x2=0; y2=0; flag=0; getContentPane().addMouseListener(this); //インスタンス作成、画面への追加、登録 getContentPane().addMouseMotionListener(this); slider_R=new JSlider(0,255,0); slider_G=new JSlider(0,255,0); slider_B=new JSlider(0,255,0); slider_W=new JSlider(1,100,1); red=new JLabel("赤"); green=new JLabel("緑"); blue=new JLabel("青"); width=new JLabel("幅"); clearButton=new JButton("画面クリア"); add(red); add(slider_R); add(green); add(slider_G); add(blue); add(slider_B); add(width); add(slider_W); add(clearButton); clearButton.addActionListener(this); Toolkit toolkit=Toolkit.getDefaultToolkit(); //画像の読み込み img=toolkit.getImage("sample.jpg"); MediaTracker mt=new MediaTracker(this); mt.addImage(img,1); try{ mt.waitForAll(); } catch(InterruptedException e){ }; img_width=img.getWidth(this); img_height=img.getHeight(this); } /* ----- 描画部分 ----- */ public void paintComponent(Graphics g){ Dimension d; d=getSize(); Graphics2D g2=(Graphics2D)g; int w; if(flag==1){ //左クリック時に楕円描画 g.setColor(new Color(slider_R.getValue(),slider_G.getValue(),slider_B.getValue())); w=slider_W.getValue(); if(w==1){ g.drawLine(x1,y1,x1,y1); //幅が1なら点を描画 }else{ g.fillOval(x1-w/2,y1-w/2,w,w); } flag=0; } if(flag==2){ //ドラッグ時に線分描画 g.setColor(new Color(slider_R.getValue(),slider_G.getValue(),slider_B.getValue())); w=slider_W.getValue(); g2.setStroke(new BasicStroke(w,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); //線分の幅や形状を設定 g.drawLine(x1,y1,x2,y2); } if(flag==3){ //ボタンクリック時に画面クリア super.paintComponent(g); flag=0; } if(flag==4){ //右クリック時にスタンプ描画 g.drawImage(img,x1-img_width/2,y1-img_height/2,this); flag=0; } g.setColor(Color.white); g.fillRect(0,0,d.width,clearButton.getY()+clearButton.getHeight()+5); //再描画時のゴミを塗りつぶす g2.setStroke(new BasicStroke(1)); //スライダーやボタンの幅が大きくならないように、幅を1に戻す } /* ----- マウスがクリックされた際の処理 ----- */ public void mouseClicked(MouseEvent me){ if(me.getButton()==MouseEvent.BUTTON1){ //左クリックの場合 flag=1; } if(me.getButton()==MouseEvent.BUTTON3){ //右クリックの場合 flag=4; } repaint(); } /* ----- マウスのボタンが押された際の処理 ----- */ public void mousePressed(MouseEvent me){ x1=me.getX(); //クリックまたはドラッグ開始時の座標保持 y1=me.getY(); } /* ----- マウスのボタンが離された際の処理 ----- */ public void mouseReleased(MouseEvent me){ flag=0; //ドラッグ終了 } /* ----- マウスポインタが画面から出た際の処理 ----- */ public void mouseExited(MouseEvent me){} /* ----- マウスポインタが画面に入った際の処理 ----- */ public void mouseEntered(MouseEvent me){} /* ----- マウスが動かされた際の処理 ----- */ public void mouseMoved(MouseEvent me){} /* ----- マウスがドラッグされた際の処理 ----- */ public void mouseDragged(MouseEvent me){ if(flag==2){ //ドラッグ中の場合 x1=x2; y1=y2; } flag=2; x2=me.getX(); y2=me.getY(); repaint(); } /* ----- 画面のボタンが押された際の処理 ----- */ public void actionPerformed(ActionEvent e){ if(e.getSource()==clearButton){ flag=3; repaint(); } } } }