• ベストアンサー

指摘してください!!!

JAVA APPLETの初歩的な質問ですが… クリックするとマウスの座標を表示するプログラムなのですが、以下のプログラムでは正しく実行しないのだそうです。 正しく実行するにはいくつかのコードを削除しなければならないのですが…。 それはどのコードなのでしょうか? プログラムは以下の通りです。 import java.applet.*; import vava.awt.*; public class Test extends Applet{   int iX,iY;   public void paint(Graphics g){    int iX,iY;    string c = new String();    g.drawString("X座標 = "+c.valueOf(iX)+"Y座標 = "+ c.valueOf(iY),10,20); } public boolean mouseDown(Event e,int x,int Y){  int iX,iY;  iX = x;  iY = y;  repaint();  return true; } } 宜しくお願いします。

noname#46603
noname#46603
  • Java
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • azicyan
  • ベストアンサー率21% (368/1747)
回答No.1

initメソッドがないことかな? public void paint(Graphics g){ の文の前にinitメソッドで使う変数を初期化してください。たとえば public void init(){   Xi=10,Yi=10 } のように・・・。 MOUSEDOWNは推奨されないAPIなので、そのエラーはでつづけますが、実行はできます。 それからINT文がたくさんありますね。 はじめの1個だけでいいです。 それから、大文字と小文字が間違っているところが数箇所・・・ そこを直さないと、もちろんコンパイルエラーです。

noname#46603
質問者

補足

有難う御座いました。 大文字小文字、記述も気をつけないといけないのですね。こんな初歩的な質問にお答えくださいまして有難うございました。

その他の回答 (3)

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.4

>エラーが出ませんか?? import java.applet.*; import java.awt.*; // vava->java public class Test extends Applet{ int iX,iY; public void paint(Graphics g){ //int iX,iY; ->comment out //string c = new String(); -> comment out g.drawString("X座標 = "+iX+"Y座標 = "+iY,10,20); // valueOf() delete } public boolean mouseDown(Event e,int x,int y){ // Y->y //int iX,iY; -> comment out iX = x; iY = y; repaint(); return true; } } 出ないと思いますが。 理由は、#2の冒頭に記述した通りです。

  • azicyan
  • ベストアンサー率21% (368/1747)
回答No.3

#2のかたへ・・・ コンパイルしてみたんですが、initがないと 「変数が初期化されていない可能性があります」 というエラーが出ませんか??

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

この場合 init() メソッドは無くても問題はありません。 メンバ変数は自動的に初期化されますので、int iX,iY; としただけで初期値(この場合0)が代入されます。 後は#1さんの指摘通りですが、補足しておくと。。。 ・大文字、小文字の間違え、スペルミス vava→java string→String int Y→int y ・無駄なローカル変数 int iX,iY; (×2) とまぁ、この部分を訂正すれば動くには動きます。 他にも無駄な記述があるのが気になります。 g.drawString("X座標 = "+c.valueOf(iX)+"Y座標 = "+ c.valueOf(iY),10,20); String クラスのインスタンス変数 c に対してvalueOf() を呼び出していますが、これはクラスメソッドなので、 String.valueOf(iX) のように呼び出すべきでしょう。 まぁそれ以前に、この場合は別段 valueOf() を使うまで もないことです。単に。。。 g.drawString("X座標 = "+iX+"Y座標 = "+iY,10,20); で済みますから。

noname#46603
質問者

補足

有難う御座いました。 こんな初歩的な質問に、細やかな指摘を下さいまして、大変助かりました。

関連するQ&A

  • javaアプレットでのy=x^2のグラフ

    javaアプレットでy=x^2のグラフを描写したいのですが、現在の状態ではグラフの右側しか画面に現れません。軸の移動をすればよいと思うのですが、どのように修正すればよいのでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class test1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); int x,yp=100,xp=0; for(x=0;x<200;x++){ int y=(int)(x*x)*(-1)+100; g.drawLine(xp,yp,x,y); xp = x; yp = y; } } }

  • Appletのrepaint()が動作しません

    import java.applet.*; import java.awt.*; /*<applet code="zxy" width="1000" height="1000"></applet>*/ class Object extends Applet { protected int x; /* オブジェクトのx座標 */ protected int y; /* オブジェクトのy座標 */ protected int width; protected int height; Image buffer; Graphics buffer_g; Dimension d = getSize(); public Object() { x = 0; y = 0; width = 0; height = 0; } } /* 楕円クラス */ class Oval extends Object implements Runnable { public Oval() { width = (int)(Math.random() * 56 + 10); height = (int)(Math.random() * 56 + 10); } public void run() { while( true ){ try{ repaint(); Thread.sleep(50); } catch( Exception e ){} } } public void paint( Graphics g ) { if( buffer_g == null ) buffer_g = buffer.getGraphics(); Dimension d = getSize(); buffer_g.setColor( Color.white ); buffer_g.fillRect( 0, 0, d.width, d.height ); buffer_g.setColor( Color.black ); buffer_g.drawOval( x, y, width, height ); x += (int)(Math.random() * 10); y += (int)(Math.random() * 10); g.drawImage( buffer, 0, 0, this ); } } public class A extends Applet { Image buffer; Graphics buffer_g; Oval ov1 = new Oval(); Thread thOv1 = new Thread( ov1 ); public void start() { thOv1.start(); Dimension d = getSize(); buffer = createImage( d.width, d.height ); } } 上記プログラムを実行しても、paint()の中が実行されずにtryブロックを繰り返すだけになってしまいます。paint()を実行するにはどうすればいいでしょうか?

  • アプレットの配列をテキスト形式で保存する

    ある画像の上をマウスクリックするとそこに赤いマーカーが表示され、さらにそのマーカーの座標をテキスト形式で保存できるプログラムを組みたいと考えています。マーカー表示はできましたが、保存方法がまったくわかりません。35箇所のマーカー座標を保存したいのですが…。 どなたか教えていただけませんでしょうか。 ブラウザ上で動作させたいので、JavaAppletにて組んでいます。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class sample extends Applet{ private int[] xpos = new int[35]; private int[] ypos = new int[35]; private int num = 0; Image imgs; public sample(){ addMouseListener(new MyMouseAdapter()); } public void init(){ imgs = getImage(getDocumentBase(),"sample.gif"); } public void paint(Graphics g){ g.drawImage(imgs,0,0,this); g.setColor(Color.red); for(int i = 0; i < num; i++){ g.fillOval(xpos[i]-2, ypos[i]-2, 4, 4); } } class MyMouseAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e){ if(num >= 35){ return; } int x,y; x = e.getX(); y = e.getY(); xpos[num] = x; ypos[num] = y; num++; Graphics g = getGraphics(); g.setColor(Color.red); g.fillOval(x-2, y-2, 4, 4); } } }

  • アプレットについて

    appletviewerで実行したところ アプレットの枠しか出てきません。中身が現れないのです。どうしたらよろしいでしょうか? import java.applet.Applet; import java.awt.*; /* <APPLET CODE="JFont2.class"WIDTH=500 HEIGHT=100> </APPLET> */ public class JFont2 extends Applet{  public void pait(Graphics g){   String ss="Djia@go",s1;   int baseline1=60,baseline2;   int x1=30,y1;    Font ft=new Font("Serif",Font.PLAIN,48);  g.setFont(ft);  g.drawString(ss,x1,baseline1);     FontMetrics fm=getFontMetrics(ft);   //アクセント上部に線を引く         y1=baseline1-fm.getAscent();     g.drawLine(10,y1,220,y1); } }

    • ベストアンサー
    • Java
  • java リアルタイムでマウスの座標を取得したい

    マウスのリアルタイム座標を取得したいのですが、 以下のソースを作りました。 しかし、リアルタイムどころか、マウスをクリックしても座標が取得できません どこを修正すればいいのでしょうか? import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.net.URL; import java.awt.Image; /*<applet code="applet001" width="640" height="480"></applet>*/ public class applet001 extends Applet implements MouseListener, MouseMotionListener { Dimension dim; int mouse_x, mouse_y; //アプレットの初期化時呼び出される public void init() { dim = getSize(); addMouseListener( this ); } public void update(Graphics g) //オーバーライドして最低限のことだけをする { paint(g); } public void paint(Graphics g) { g.drawString( "マウス:" + mouse_x + "," + mouse_y, 60, 120 ); g.fillOval(mouse_x,mouse_y,30,30); } // マウスの処理 public void mousePressed( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); } public void mouseClicked( MouseEvent e ) {} public void mouseReleased( MouseEvent e ) {} public void mouseEntered( MouseEvent e ) {} public void mouseDragged( MouseEvent e ) {} // public void mouseExited( MouseEvent e ) {} // public void mouseMoved( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); repaint(); } }

    • ベストアンサー
    • Java
  • このプログラムのどこがいけないかの指摘をお願いします!

    import java.io.*; public class ex32h_1{ public static void main(String args[]) throws Exception{ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.print("x="); int x=(new Integer(in.readLine())).intValue(); System.out.print("y="); int y=(new Integer(in.readLine())).intValue(); System.out.print("z="); int z=(new Integer(in.readLine())).intValue(); boolean result= (x*y*z==0) && ((x^2+y^2)!=0) && ((y^2+z^2)!=0) && ((x^2+z^2)!=0); System.out.println("0は一つ?;"+result); } } x,y,zに0が一つだけあるかどうかを調べるというものです。x=0,y=1,z=1(0,1,1)の組み合わせのときはなぜかfalseになってしまいます。他のとき(0,1,2)のときなどはきちんとtrueになります。 どこがいけないかわかるかたご指摘の程をお願いします。 (幅の都合上左よりですが実際のプログラムをきちんとスペースが入っています。)

    • ベストアンサー
    • Java
  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • 配列のソート

    Javaのプログラムで、以下のように半径rでソートして並び替えて出力したいのですがどうやって作ればいいのでしょうか? ご教授願います。 0x座標は0 y座標は0 半径は48 1x座標は1 y座標は2 半径は42 2x座標は2 y座標は4 半径は5 3x座標は3 y座標は6 半径は75 4x座標は4 y座標は8 半径は21 0x座標は2 y座標は4 半径は5 1x座標は4 y座標は8 半径は21 2x座標は1 y座標は2 半径は42 3x座標は0 y座標は0 半径は48 4x座標は3 y座標は6 半径は75 半径の値はランダムです 自分では以下まで作りました。なるべく以下の形は変えないようにしたいです。 class Circle{ private int x,y,r,j; private static int i=0; Circle(int px,int py,int pr) { x=px; y=py; r=pr; } public static void show(Circle c){ System.out.println(i+"x座標は"+c.x+" y座標は"+c.y+" 半径は"+c.r); i++; } public static void sort(Circle c){ } } class Sample{ public static void main(String args[]) { Circle[] a=new Circle[5]; for(int i=0;i<a.length;i++) { a[i]=new Circle(i,2*i,(int)(Math.random()*100)); a[i].show(a[i]); } } }

  • forを使用した文字列表示プログラムについて

    お世話になります。 Javaの超初心者です。 以下のプログラムがあるのですが、どうしてもわからないのでご教授願います。 import java.applet.*; import java.awt.*; public class DrawStarRow extends Applet { public void paint(Graphics g){ String star = ""; int xPosition = 10, yPosition = 60; //★を文字列変数に1個ずつ追加するループ文 for(int i=0; i<10; i++){ star = star + "★"; } //10個の★マークをアプレット上に描画する g.drawString(star, xPosition, yPosition); } } これを実行すると、(10, 60)の位置から右側に10個星が表示されるのですが、 なぜ「右側」に続けて表示されるのかがわかりません。 今までは、例えばg.drawOval(10+i*10、10+i*10, 20, 20)とかで、 i=i+1であればxもyも変化するのでわかるんですが、 この式は全くそういうことも書いておらず、それなのにx位置だけ 自動的に変わった位置で星がどんどん増えていくんですよね。 この式の中のxPositionもyPositionも、iに関連付けされていないようですが、 そのため、iが0でも3でもx位置とy位置は同じように見えてしまうのです。 説明がへたくそで申し訳ありませんが、どなたか理由を説明していただけないでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • コンパイル時のエラー。

    いつも大変お世話になりありがとうございます。 初心者向けのJAVAの件。 コンパイルが下記の通りになりました。 どこが間違っているのでしょうか? アドバイスのほど、宜しくお願い申し上げます。 C:\JAVA>javac Lesson09.java C:\JAVA>java Lesson09 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Lesson09.main(Lesson09.java:4) コード public class Lesson09 { public static void main(String[] args) { int x, y; x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); java.awt.Point point = new java.awt.Point(); point.setLocation(x, y); System.out.println("X, Y座標をフィールドで参照します(int)"); System.out.println("X 座標:" + point.x); System.out.println("Y 座標:" + point.y); System.out.println("X, Y座標getメソッドで参照します(double)"); System.out.println("X 座標:" + point.getX()); System.out.println("Y 座標:" + point.getY()); } }

    • ベストアンサー
    • Java

専門家に質問してみよう