###お絵描きソフトについて質問
現在Javaでお絵描きソフトを勉強していて、描画したり色を変えたり出来るところまできました。
そして今度はペンの太さをラジオボタンで変更できるようにしたいのですが、どの様にすればいいのかわかりません。
どこに何を追加すればいいのか教えてくれたらありがたいです。
該当のソースコード
DrawArea.java
Java
1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.Graphics2D; 4import java.awt.Image; 5import java.awt.RenderingHints; 6import java.awt.event.MouseAdapter; 7import java.awt.event.MouseEvent; 8import java.awt.event.MouseMotionAdapter; 9 10import javax.swing.JComponent; 11 12public class DrawArea extends JComponent { 13 14 //画像を描画 15 private Image image; 16 //Graphics2D objectを描画に使う 17 private Graphics2D g2; 18 //マウス座標 19 private int currentX,currentY,oldX,oldY; 20 21 public DrawArea() { 22 setDoubleBuffered(false); 23 addMouseListener(new MouseAdapter() { 24 public void mousePressed(MouseEvent e) { 25 // マウスが押されたときにx,y座標を保存 26 oldX = e.getX(); 27 oldY = e.getY(); 28 } 29 }); 30 31 addMouseMotionListener(new MouseMotionAdapter() { 32 public void mouseDragged(MouseEvent e) { 33 // マウスをドラッグするときの座標 34 currentX = e.getX(); 35 currentY = e.getY(); 36 37 if (g2 != null) { 38 // g2コンテキストがnullじゃない場合は線を引く 39 g2.drawLine(oldX, oldY, currentX, currentY); 40 // 再描画 41 repaint(); 42 // 現在の座標x、yを古いx、yとして保存 43 oldX = currentX; 44 oldY = currentY; 45 } 46 } 47 }); 48 } 49 50 protected void paintComponent(Graphics g) { 51 if (image == null) { 52 // 描画する画像を作成 53 image = createImage(getSize().width, getSize().height); 54 g2 = (Graphics2D) image.getGraphics(); 55 // アンチエイリアスを有効 56 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 57 // clear draw area 58 clear(); 59 } 60 61 g.drawImage(image, 0, 0, null); 62 } 63 64 // 公開されたメソッドを作成 65 public void clear() { 66 g2.setPaint(Color.white); 67 // 絵を消すために描画領域全体を白くする 68 g2.fillRect(0, 0, getSize().width, getSize().height); 69 g2.setPaint(Color.black); 70 repaint(); 71 } 72 73 public void red() { 74 // g2に赤色を適用 75 g2.setPaint(Color.red); 76 } 77 78 public void black() { 79 g2.setPaint(Color.black); 80 } 81 82 public void magenta() { 83 g2.setPaint(Color.magenta); 84 } 85 86 public void green() { 87 g2.setPaint(Color.green); 88 } 89 90 public void blue() { 91 g2.setPaint(Color.blue); 92 } 93} 94
SwingPaint.java
java
1import java.awt.BorderLayout; 2import java.awt.Container; 3import java.awt.event.ActionEvent; 4import java.awt.event.ActionListener; 5 6import javax.swing.JButton; 7import javax.swing.JFrame; 8import javax.swing.JPanel; 9 10public class SwingPaint { 11 12 JButton clearBtn, blackBtn, blueBtn, greenBtn, redBtn, magentaBtn; 13 DrawArea drawArea; 14 ActionListener actionListener = new ActionListener() { 15 16 public void actionPerformed(ActionEvent e) { 17 if (e.getSource() == clearBtn) { 18 drawArea.clear(); 19 } else if (e.getSource() == blackBtn) { 20 drawArea.black(); 21 } else if (e.getSource() == blueBtn) { 22 drawArea.blue(); 23 } else if (e.getSource() == greenBtn) { 24 drawArea.green(); 25 } else if (e.getSource() == redBtn) { 26 drawArea.red(); 27 } else if (e.getSource() == magentaBtn) { 28 drawArea.magenta(); 29 } 30 } 31 }; 32 33 public static void main(String[] args) { 34 new SwingPaint().show(); 35 } 36 37 public void show() { 38 // メインフレームを作る 39 JFrame frame = new JFrame("お絵かき"); 40 Container content = frame.getContentPane(); 41 // set layout on content pane 42 content.setLayout(new BorderLayout()); 43 // create draw area 44 drawArea = new DrawArea(); 45 46 // add to content pane 47 content.add(drawArea, BorderLayout.CENTER); 48 49 // 色を適用して、クリア機能を呼び出すための"controls"を作成 50 JPanel controls = new JPanel(); 51 52 clearBtn = new JButton("Clear"); 53 clearBtn.addActionListener(actionListener); 54 blackBtn = new JButton("Black"); 55 blackBtn.addActionListener(actionListener); 56 blueBtn = new JButton("Blue"); 57 blueBtn.addActionListener(actionListener); 58 greenBtn = new JButton("Green"); 59 greenBtn.addActionListener(actionListener); 60 redBtn = new JButton("Red"); 61 redBtn.addActionListener(actionListener); 62 magentaBtn = new JButton("Magenta"); 63 magentaBtn.addActionListener(actionListener); 64 65 // add to panel 66 controls.add(greenBtn); 67 controls.add(blueBtn); 68 controls.add(blackBtn); 69 controls.add(redBtn); 70 controls.add(magentaBtn); 71 controls.add(clearBtn); 72 73 // add to content pane 74 content.add(controls, BorderLayout.NORTH); 75 76 frame.setSize(600, 600); 77 // フレームを閉じるよ!!!!!!!!!!!!! 78 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 79 // swing paintの結果を表示する 80 frame.setVisible(true); 81 82 } 83 84} 85
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー