質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

1回答

834閲覧

java:ボタンを押したら画像の色を三角形の形に塗りつぶしたい

yasu_abu7

総合スコア12

Java

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

0グッド

0クリップ

投稿2018/11/06 01:52

編集2018/11/06 02:09

今回したいのは、ボタンを押したら読み取った画像の部分の色を三角形に塗りつぶしたいです。
ボタンを押す前は、三角錐の展開図を表示していて、ボタンを押したら上記のようにしたいです。
ソースは、以下に示します。
今は、三角錐の展開図の表示と画像を読み取る部分まではうまくできているのですが、塗りつぶすことができません。

java

1  Color color[] = new Color[36]; 2 /* 色を抽出するための点の座標を定義している場所 */ 3 static int x[] = {205,260,320,390,440,265,320,380,320}; 4 static int y[] = {165,195,170,185,165,270,290,270,360}; 5 /* 三角を描画するための座標を定義している場所 */ 6    x1~x36,y1~y36は三角を塗りつぶすための座標 7 BufferedImage imagehairetu[] = new BufferedImage[4]; 8 String F = "D:/workspace/KAIHATUU"; 9 FileInputStream z[]; 10 Boolean bool = Boolean.valueOf(true); 11 public static void main(String[] args) { 12 new irohannei().setVisible(true); 13 } 14 public irohannei(){ 15 super(); 16 setBounds(550,250,800,600); 17 this.setTitle("色"); 18 File file = new File("rgby1.jpg"); 19 if(file.exists()){ 20 System.out.println("保存した画像があります"); 21 if(file.canRead()){ 22 System.out.println("画像を読み込めれれるよ!"); 23 for(int i=0;i<4;i++){ 24 try { 25 imagehairetu[i] = ImageIO.read(file); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 System.out.println(i+"番目の要素:"+imagehairetu); 30 } 31 System.out.println("画像を読みこんだよ!"); 32 System.out.println("配列に画像を入れたよ!"); 33 }else{ 34 System.out.println("画像を読み込めないよ!"); 35 } 36 }else{ 37 System.out.println("画像がないよ!"); 38 } 39 JButton button1 = new JButton("ボタン1"); 40 button1.setVisible(true); 41 button1.setBounds(100, 100, 100, 100); 42 button1.addActionListener( 43 new ActionListener(){ 44 public void actionPerformed(ActionEvent event){ 45 String isStringBool = "true"; 46 String str = bool.toString(); 47 if(str.equals(isStringBool)){ 48 System.out.println("1");//確認用 49 158行目 → paintComponents(color); 50 System.out.println("2");//確認用 51 } 52 } 53 private void paintComponents(Color[] color) { 54 Graphics g = null; 55 System.out.println(imagehairetu[0]); 56 System.out.println(imagehairetu[1]); 57 System.out.println(imagehairetu[2]); 58 System.out.println(imagehairetu[3]); 59 System.out.println("1面の色データ格納完了!"); 60 color[0] = new Color(imagehairetu[0].getRGB(x[0], y[0])); 61 color[1] = new Color(imagehairetu[0].getRGB(x[1], y[1])); 62 color[2] = new Color(imagehairetu[0].getRGB(x[2], y[2])); 63 color[3] = new Color(imagehairetu[0].getRGB(x[3], y[3])); 64 color[4] = new Color(imagehairetu[0].getRGB(x[4], y[4])); 65 color[5] = new Color(imagehairetu[0].getRGB(x[5], y[5])); 66 color[6] = new Color(imagehairetu[0].getRGB(x[6], y[6])); 67 color[7] = new Color(imagehairetu[0].getRGB(x[7], y[7])); 68 color[8] = new Color(imagehairetu[0].getRGB(x[8], y[8])); 69 System.out.println("2面の色データ格納完了!"); 70 color[9] = new Color(imagehairetu[1].getRGB(x[0], y[0])); 71 color[10] = new Color(imagehairetu[1].getRGB(x[1], y[1])); 72 color[11] = new Color(imagehairetu[1].getRGB(x[2], y[2])); 73 color[12] = new Color(imagehairetu[1].getRGB(x[3], y[3])); 74 color[13] = new Color(imagehairetu[1].getRGB(x[4], y[4])); 75 color[14] = new Color(imagehairetu[1].getRGB(x[5], y[5])); 76 color[15] = new Color(imagehairetu[1].getRGB(x[6], y[6])); 77 color[16] = new Color(imagehairetu[1].getRGB(x[7], y[7])); 78 color[17] = new Color(imagehairetu[1].getRGB(x[8], y[8])); 79 System.out.println("3面の色データ格納完了!"); 80 color[18] = new Color(imagehairetu[2].getRGB(x[0], y[0])); 81 color[19] = new Color(imagehairetu[2].getRGB(x[1], y[1])); 82 color[20] = new Color(imagehairetu[2].getRGB(x[2], y[2])); 83 color[21] = new Color(imagehairetu[2].getRGB(x[3], y[3])); 84 color[22] = new Color(imagehairetu[2].getRGB(x[4], y[4])); 85 color[23] = new Color(imagehairetu[2].getRGB(x[5], y[5])); 86 color[24] = new Color(imagehairetu[2].getRGB(x[6], y[6])); 87 color[25] = new Color(imagehairetu[2].getRGB(x[7], y[7])); 88 color[26] = new Color(imagehairetu[2].getRGB(x[8], y[8])); 89 System.out.println("4面の色データ格納完了!"); 90 color[27] = new Color(imagehairetu[3].getRGB(x[0], y[0])); 91 color[28] = new Color(imagehairetu[3].getRGB(x[1], y[1])); 92 color[29] = new Color(imagehairetu[3].getRGB(x[2], y[2])); 93 color[30] = new Color(imagehairetu[3].getRGB(x[3], y[3])); 94 color[31] = new Color(imagehairetu[3].getRGB(x[4], y[4])); 95 color[32] = new Color(imagehairetu[3].getRGB(x[5], y[5])); 96 color[33] = new Color(imagehairetu[3].getRGB(x[6], y[6])); 97 color[34] = new Color(imagehairetu[3].getRGB(x[7], y[7])); 98 color[35] = new Color(imagehairetu[3].getRGB(x[8], y[8])); 99 210行目 → g.setColor(color[8]); 100 g.fillPolygon(x1, y1, 4); 101 g.setColor(color[5]); 102 g.fillPolygon(x2, y2, 4); 103 g.setColor(color[6]); 104 g.fillPolygon(x3, y3, 4); 105 g.setColor(color[7]); 106 g.fillPolygon(x4, y4, 4); 107 g.setColor(color[0]); 108 g.fillPolygon(x5, y5, 4); 109 g.setColor(color[1]); 110 g.fillPolygon(x6, y6, 4); 111 g.setColor(color[2]); 112 g.fillPolygon(x7, y7, 4); 113 g.setColor(color[3]); 114 g.fillPolygon(x8, y8, 4); 115 g.setColor(color[4]); 116 g.fillPolygon(x9, y9, 4); 117 /*2面*/ 118 g.setColor(color[13]); 119 g.fillPolygon(x10, y10, 4); 120 g.setColor(color[12]); 121 g.fillPolygon(x11, y11, 4); 122 g.setColor(color[11]); 123 g.fillPolygon(x12, y12, 4); 124 g.setColor(color[10]); 125 g.fillPolygon(x13, y13, 4); 126 g.setColor(color[9]); 127 g.fillPolygon(x14, y14, 4); 128 g.setColor(color[16]); 129 g.fillPolygon(x15, y15, 4); 130 g.setColor(color[15]); 131 g.fillPolygon(x16, y16, 4); 132 g.setColor(color[14]); 133 g.fillPolygon(x17, y17, 4); 134 g.setColor(color[17]); 135 g.fillPolygon(x18, y18, 4); 136 /*3面*/ 137 g.setColor(color[22]); 138 g.fillPolygon(x19, y19, 4); 139 g.setColor(color[21]); 140 g.fillPolygon(x20, y20, 4); 141 g.setColor(color[20]); 142 g.fillPolygon(x21, y21, 4); 143 g.setColor(color[19]); 144 g.fillPolygon(x22, y22, 4); 145 g.setColor(color[18]); 146 g.fillPolygon(x23, y23, 4); 147 g.setColor(color[25]); 148 g.fillPolygon(x24, y24, 4); 149 g.setColor(color[24]); 150 g.fillPolygon(x25, y25, 4); 151 g.setColor(color[23]); 152 g.fillPolygon(x26, y26, 4); 153 g.setColor(color[26]); 154 g.fillPolygon(x27, y27, 4); 155 /*4面*/ 156 g.setColor(color[31]); 157 g.fillPolygon(x28, y28, 4); 158 g.setColor(color[30]); 159 g.fillPolygon(x29, y29, 4); 160 g.setColor(color[29]); 161 g.fillPolygon(x30, y30, 4); 162 g.setColor(color[28]); 163 g.fillPolygon(x31, y31, 4); 164 g.setColor(color[27]); 165 g.fillPolygon(x32, y32, 4); 166 g.setColor(color[32]); 167 g.fillPolygon(x33, y33, 4); 168 g.setColor(color[33]); 169 g.fillPolygon(x34, y34, 4); 170 g.setColor(color[34]); 171 g.fillPolygon(x35, y35, 4); 172 g.setColor(color[35]); 173 g.fillPolygon(x36, y36, 4); 174 }}); 175 JPanel p = new JPanel(); 176 JPanel p1 = new JPanel(){ 177 public void paintComponent(Graphics g){ 178 super.paintComponent(g); 179 /* 抽出した色を三角の中に反映している場所 */ 180 /*枠線*/ 181 Graphics2D g2 = (Graphics2D)g; 182 BasicStroke stroke = new BasicStroke(3.5f); 183 g2.setStroke(stroke); 184 /*1面*/ 185 g.drawPolygon(x1, y1, 4); 186 g.drawPolygon(x2, y2, 4); 187 g.drawPolygon(x3, y3, 4); 188 g.drawPolygon(x4, y4, 4); 189 g.drawPolygon(x5, y5, 4); 190 g.drawPolygon(x6, y6, 4); 191 g.drawPolygon(x7, y7, 4); 192 g.drawPolygon(x8, y8, 4); 193 g.drawPolygon(x9, y9, 4); 194 /*2面*/ 195 g.drawPolygon(x10, y10, 4); 196 g.drawPolygon(x11, y11, 4); 197 g.drawPolygon(x12, y12, 4); 198 g.drawPolygon(x13, y13, 4); 199 g.drawPolygon(x14, y14, 4); 200 g.drawPolygon(x15, y15, 4); 201 g.drawPolygon(x16, y16, 4); 202 g.drawPolygon(x17, y17, 4); 203 g.drawPolygon(x18, y18, 4); 204 /*3面*/ 205 g.drawPolygon(x19, y19, 4); 206 g.drawPolygon(x20, y20, 4); 207 g.drawPolygon(x21, y21, 4); 208 g.drawPolygon(x22, y22, 4); 209 g.drawPolygon(x23, y23, 4); 210 g.drawPolygon(x24, y24, 4); 211 g.drawPolygon(x25, y25, 4); 212 g.drawPolygon(x26, y26, 4); 213 g.drawPolygon(x27, y27, 4); 214 /*4面*/ 215 g.drawPolygon(x28, y28, 4); 216 g.drawPolygon(x29, y29, 4); 217 g.drawPolygon(x30, y30, 4); 218 g.drawPolygon(x31, y31, 4); 219 g.drawPolygon(x32, y32, 4); 220 g.drawPolygon(x33, y33, 4); 221 g.drawPolygon(x34, y34, 4); 222 g.drawPolygon(x35, y35, 4); 223 g.drawPolygon(x36, y36, 4); 224 } 225 }; 226 p1.setSize(new Dimension(800,600 )); 227 p.setBackground(Color.white); 228 //自分で場所を決めるためのnull 229 p.setLayout(null); 230 p1.setLayout(null); 231 p.add(p1); 232 p.add(button1); 233 Container contentPane = getContentPane(); 234 getContentPane().add(p, BorderLayout.CENTER); 235 }

エラーとしましては、
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at irohannei$1.paintComponents(irohannei.java:210) → g.setColor(color[8]);
at irohannei$1.actionPerformed(irohannei.java:158) → paintComponents(color);
として出ます。指摘お願いします。

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

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

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

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

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

dice142

2018/11/06 01:54

JavaとJavaScriptは別物です。関係がなければJavaScriptタグは外してください。
KSwordOfHaste

2018/11/06 02:04

irohannei.javaの210行目、158行目がどの行なのか閲覧者にはわかりません。その行がどこなのかソースコード上にコメントなどで明記してください。
yasu_abu7

2018/11/06 02:08

すいません、指摘されたところは改善しました。
guest

回答1

0

Java

1Graphics g = null;

該当のpaintComponent()の初めに上のコードがあり、
以降gは何も代入されていないので、nullのままg.setColor()が呼び出されているので、
NullPointerExceptionが出ています。


paintComponent()は描画に関するメソッドですが、JComponentクラスもしくはそれを継承したクラスでオーバーライドすることで意味をなします。
ActionListenerのactionPerformed内で使うには、そのクラスのインスタンスのrepaint()を呼び出すことでできます。

投稿2018/11/06 02:15

編集2018/11/06 03:06
dice142

総合スコア5158

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

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

yasu_abu7

2018/11/06 02:24

お聞きしたのですが、Graphics g と引数を定義しているのですが、どのような使い方をすればよいのでしょうか?
dice142

2018/11/06 02:26

210行目が属するpaintComponentの引数がまずGraphics gではありません。
dice142

2018/11/06 02:27

そもそもpaintComponentの引数が違うのでコンパイル通らない気がしますが。
yasu_abu7

2018/11/06 02:28

もし、210行目が属するpaintComponentの引数をGraphics gにしてpaintComponentを飛び出すときの()の中にはどのように指定すればよいのでしょうか?
dice142

2018/11/06 02:30

paintComponentを飛び出すという表現がよくわかりません。 paintComponentの引数をGraphics gにすれば()の中はGraphics gになるんじゃないですか?
yasu_abu7

2018/11/06 02:32

フラグを使用しているところでpaintComponentsを使用しているのですが、その時の()の中身がわからないのです。
swordone

2018/11/06 02:36

飛び出す→呼び出す?
dice142

2018/11/06 02:37

そもそもですが、paintComponentの書き方や場所がおかしいです。 今一度paintComponentの書き方を見直したほうが良いです。
yasu_abu7

2018/11/06 02:37

あ、すみません。誤字になっていました。飛び出すではなく呼び出すでした。
yasu_abu7

2018/11/06 02:39

あとわからないのは、ボタンのアクションイベントを定義する場所でGraphicsクラスを使えないのねぜでしょうか?アクションイベントを定義する場所でGraphicsクラスを使おうとするとエラーになってしまします。
dice142

2018/11/06 02:44

呼び出すの誤字なんですね。納得しました。>飛び出す そもそもなんですが、paintComponentはJComponentクラス(JPanelの親クラス)のメソッドなので、ActionListenerクラスにつける意味がないです。 つけるならJPanelクラスかそれを継承したクラスになるはずです。 書き方から見直してください。
yasu_abu7

2018/11/06 02:52

ボタンのアクションイベントの中にpaintComponentを書いていましたが、paintに書き換え、アクションイベントの外に書き換えました。 ActionListenerクラスにつける意味がなければ、どうしたらボタンを押したら色を塗れるようになるのでしょうか?フラグを利用するのでしょうか?
dice142

2018/11/06 02:56

paintComponentはJComponentクラスを継承しているクラスに書きます。 ActionListenerのactionPerformedメソッドではrepaint()を呼び出せば描画されるはずです。
yasu_abu7

2018/11/06 02:57

なるほど! repaint()をよびだすのですね! すこし、やってみます。ありがとうございます!
dice142

2018/11/06 03:06

回答に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問