🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

Q&A

解決済

1回答

2450閲覧

お絵描きソフトのペンの太さ

kaikai-0303

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

1グッド

0クリップ

投稿2020/11/24 06:21

編集2020/11/24 07:03

###お絵描きソフトについて質問

現在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

よろしくお願いします。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/11/24 06:25

canvasはHTML要素ですが、本構文では使用していないように思いますが・・・。 Javaアプレットとかに出力しているのでしょうか?
kaikai-0303

2020/11/24 07:04

すいません。タグを間違えただけです。修正しました。
TN8001

2020/11/24 08:59

JRadioButton(あるいはJToggleButton)の使い方の話ですか? それとも線の太さ(g2.setStroke)の話ですか? あるいは両方??
guest

回答1

0

ベストアンサー

ペンの太さをラジオボタンで変更できるようにしたい

よく考えると色のボタンもトグル動作ですよね?
見た目を合わす意味でも、両方JToggleButtonにしました(レイアウトは適当です^^;
SwingPaint#show()が長くなってきたので、分けさせてもらいました(他少々

Java

1import java.awt.BasicStroke; 2import java.awt.BorderLayout; 3import java.awt.Color; 4import java.awt.Graphics; 5import java.awt.Graphics2D; 6import java.awt.Image; 7import java.awt.Paint; 8import java.awt.RenderingHints; 9import java.awt.event.ActionEvent; 10import java.awt.event.ActionListener; 11import java.awt.event.MouseAdapter; 12import java.awt.event.MouseEvent; 13import java.awt.event.MouseMotionAdapter; 14import javax.swing.ButtonGroup; 15import javax.swing.JButton; 16import javax.swing.JComponent; 17import javax.swing.JFrame; 18import javax.swing.JLabel; 19import javax.swing.JPanel; 20import javax.swing.JToggleButton; 21 22public class SwingPaint extends JFrame { 23 private final DrawArea drawArea = new DrawArea(); 24 25 public static void main(String[] args) { 26 new SwingPaint().setVisible(true); 27 } 28 29 private SwingPaint() { 30 super("お絵かき"); 31 setSize(600, 600); 32 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 33 setLocationRelativeTo(null); // 中央表示 34 setResizable(false); // リサイズ禁止 35 36 JButton clearBtn = new JButton("Clear"); 37 clearBtn.addActionListener(e -> drawArea.clear()); 38 JPanel panel = new JPanel(); 39 panel.add(clearBtn); 40 41 JPanel controls = new JPanel(new BorderLayout()); 42 controls.add(createColorButtons(), BorderLayout.NORTH); 43 controls.add(createSizeButtons(), BorderLayout.CENTER); 44 controls.add(panel, BorderLayout.EAST); 45 46 add(controls, BorderLayout.NORTH); 47 add(drawArea, BorderLayout.CENTER); 48 } 49 50 private JPanel createColorButtons() { 51 JToggleButton green = new JToggleButton("Green"); 52 JToggleButton blue = new JToggleButton("Blue"); 53 JToggleButton black = new JToggleButton("Black", true); // 初期選択 54 JToggleButton red = new JToggleButton("Red"); 55 JToggleButton magenta = new JToggleButton("Magenta"); 56 57 ActionListener actionListener = new ActionListener() { 58 @Override public void actionPerformed(ActionEvent e) { 59 if (e.getSource() == black) { 60 drawArea.setStrokeColor(Color.BLACK); 61 } else if (e.getSource() == blue) { 62 drawArea.setStrokeColor(Color.BLUE); 63 } else if (e.getSource() == green) { 64 drawArea.setStrokeColor(Color.GREEN); 65 } else if (e.getSource() == red) { 66 drawArea.setStrokeColor(Color.RED); 67 } else if (e.getSource() == magenta) { 68 drawArea.setStrokeColor(Color.MAGENTA); 69 } 70 } 71 }; 72 73 ButtonGroup group = new ButtonGroup(); // 同じグループに入れると勝手にトグルしてくれる 74 JPanel controls = new JPanel(); 75 controls.add(new JLabel("Color")); 76 77 JToggleButton[] buttons = new JToggleButton[]{ green, blue, black, red, magenta }; 78 for (JToggleButton button : buttons) { 79 button.addActionListener(actionListener); 80 group.add(button); 81 controls.add(button); 82 } 83 84 return controls; 85 } 86 87 private JPanel createSizeButtons() { 88 JToggleButton stroke1 = new JToggleButton("1", true); 89 JToggleButton stroke5 = new JToggleButton("5"); 90 JToggleButton stroke10 = new JToggleButton("10"); 91 92 ActionListener actionListener = new ActionListener() { 93 @Override public void actionPerformed(ActionEvent e) { 94 if (e.getSource() == stroke1) { 95 drawArea.setStrokeSize(1); 96 } else if (e.getSource() == stroke5) { 97 drawArea.setStrokeSize(5); 98 } else if (e.getSource() == stroke10) { 99 drawArea.setStrokeSize(10); 100 } 101 } 102 }; 103 104 ButtonGroup group = new ButtonGroup(); 105 JPanel controls = new JPanel(); 106 controls.add(new JLabel("Size")); 107 108 JToggleButton[] buttons = new JToggleButton[]{ stroke1, stroke5, stroke10 }; 109 for (JToggleButton button : buttons) { 110 button.addActionListener(actionListener); 111 group.add(button); 112 controls.add(button); 113 } 114 115 return controls; 116 } 117} 118 119class DrawArea extends JComponent { 120 private Image image; 121 private Graphics2D g2; 122 private int oldX, oldY; 123 124 public DrawArea() { 125 setDoubleBuffered(false); 126 addMouseListener(new MouseAdapter() { 127 @Override public void mousePressed(MouseEvent e) { 128 oldX = e.getX(); 129 oldY = e.getY(); 130 } 131 }); 132 133 addMouseMotionListener(new MouseMotionAdapter() { 134 @Override public void mouseDragged(MouseEvent e) { 135 int currentX = e.getX(); 136 int currentY = e.getY(); 137 138 g2.drawLine(oldX, oldY, currentX, currentY); 139 repaint(); 140 141 oldX = currentX; 142 oldY = currentY; 143 } 144 }); 145 } 146 147 protected void paintComponent(Graphics g) { 148 if (image == null) { 149 image = createImage(getWidth(), getHeight()); 150 g2 = (Graphics2D) image.getGraphics(); 151 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 152 clear(); 153 } 154 155 g.drawImage(image, 0, 0, null); 156 } 157 158 public void clear() { 159 Paint p = g2.getPaint(); // 元の色 160 g2.setPaint(Color.WHITE); 161 g2.fillRect(0, 0, getWidth(), getHeight()); 162 g2.setPaint(p); // 元の色に戻す 163 repaint(); 164 } 165 166 public void setStrokeColor(Color color) { g2.setPaint(color); } 167 168 public void setStrokeSize(int size) { 169// g2.setStroke(new BasicStroke(size)); // だけだとギザギザが汚い 170 g2.setStroke(new BasicStroke(size, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 171 } 172}

参考
Graphics2D - setStroke (Java Platform SE 8 )
BasicStroke (Java Platform SE 8 )

JToggleButton (Java Platform SE 8 )
ButtonGroup (Java Platform SE 8 )

投稿2020/11/25 04:02

TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaikai-0303

2020/11/28 22:25

ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問