• ベストアンサー

AWTの質問

以下のようなコードを書きました。円の中をクリックすると赤色に塗りつぶしたいようにしたいのですが、現状だとどこをクリックしても赤色に塗りつぶされます。(クリックした座標が円の範囲にあれば。。)というような処理を付け加えたいのですが手順がわかりません。コードで示してもらえると助かります。 import java.applet.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class En extends Applet implements MouseListener{ public void init() { this.addMouseListener(this); } public void paint(Graphics g) { g.fillOval(20, 25, 500, 400); } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); g.setColor(Color.red); //ここに何か書くべきと思われる g.fillOval(20, 25, 500, 400); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

質問者が選んだベストアンサー

  • ベストアンサー
  • zozy
  • ベストアンサー率60% (20/33)
回答No.3

このようにソースを追加したら出来るようになりました。 ソースを見て分からない点、納得できない点が ございましたら、分からない点を 具体的に明記した上返信ください。 追加した行の文頭に*を入れておきます。 import java.applet.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class En extends Applet implements MouseListener{ //中心からn度の線を引いたときの円周との接点のX座標 *int[] fillX=new int[360]; //中心からn度の線を引いたときの円周との接点のY座標 *int[] fillY=new int[360]; *public En(){ //1~360度の線を引いたときの各接点のX,Y座標を計算 *for(int i=0;i<360;i++){ *fillX[i]=(int)(Math.cos(Math.toRadians(i))*250+270); *fillY[i]=(int)(225-Math.sin(Math.toRadians(i))*200); *} *} public void init() { this.addMouseListener(this); //実行時の画面サイズの設定 *resize(550,450); } public void paint(Graphics g) { g.fillOval(20, 25, 500, 400); } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); //flag=trueのときに色の塗りつぶしが許可される *boolean flag=false; //クリック時のマウスの座標が0~89度の扇形内に入っているか? *for(int i=0;i<90;i++){ *if(e.getX()>=270&&e.getX()<=fillX[i]&&e.getY()<=225&&e.getY()>=fillY[i]){ *flag=true; *} *} //クリック時のマウスの座標が90~179度の扇形内に入っているか? *for(int i=90;i<180;i++){ *if(e.getX()<=270&&e.getX()>=fillX[i]&&e.getY()<=225&&e.getY()>=fillY[i]){ *flag=true; *} *} //クリック時のマウスの座標が180~269度の扇形内に入っているか? *for(int i=180;i<270;i++){ *if(e.getX()<=270&&e.getX()>=fillX[i]&&e.getY()>=225&&e.getY()<=fillY[i]){ *flag=true; *} *} //クリック時のマウスの座標が270~359度の扇形内に入っているか? *for(int i=270;i<360;i++){ *if(e.getX()>=270&&e.getX()<=fillX[i]&&e.getY()>=225&&e.getY()<=fillY[i]){ *flag=true; *} *} *if(flag==true){ g.setColor(Color.red); g.fillOval(20, 25, 500, 400); *} } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

redhat_001
質問者

お礼

Javaはメソッドがたくさんあるので簡単に出来るものかと思っていましたが。。こんなに大変な作業だとは知りませんでした。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

> 質問です。実行したのですが、同じく円の外をクリック > しても反応して色が変わりました。これは円の中をクリ > ックしたときに色が変わるコードでしょうか? この質問への答えは、あなたがいちばんよくご存じのはず。「何に」マウスリスナをaddしましたか? アプレット全体ですよね。 円の中だけにしたかったら、mouseClicked()メソッドの中で、マウスの座標を判定する必要があります。それは、java.awt.Shapeのcontains()メソッドを使う、やや高度なプログラミングになります。

すると、全ての回答が全文表示されます。
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

次のようにしてください。 なお、getGraphics()メソッドを通常の描画目的に使ってはいけません。詳細はこのFAQのQ3.4を読んでください: http://homepage1.nifty.com/algafield/JavaGUIFaq19j.html ----------------------------------------------------------------- (全角スペースを半角スペース2個に置換してからコンパイルしてください。) ----------------------------------------------------------- /* <applet code="En2" width="540" height="450"></applet> */ import java.applet.*; import java.awt.*; import java.awt.event.*; public class En2 extends Applet implements MouseListener{  boolean fill = false;  public void init() {   this.addMouseListener(this);  }  public void paint(Graphics g) {   if (fill){    g.setColor(Color.red);    g.fillOval(20, 25, 500, 400);   }   else{    g.setColor(Color.black);    g.drawOval(20, 25, 500, 400);   }  }  public void mouseClicked(MouseEvent e) {   fill = ! fill;   repaint();  }  public void mousePressed(MouseEvent e) {  }  public void mouseReleased(MouseEvent e) {  }  public void mouseEntered(MouseEvent e) {  }  public void mouseExited(MouseEvent e) {  } } ------------------------------------------

redhat_001
質問者

お礼

質問です。実行したのですが、同じく円の外をクリックしても反応して色が変わりました。これは円の中をクリックしたときに色が変わるコードでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A