Javaでボタンが表示されない問題とクリック待ち時間の設定方法

このQ&Aのポイント
  • Javaで簡単なモグラ叩きゲームを作成中。リトライボタンが表示されない問題が発生している。
  • マウスのクリック待ち時間(クリック制限時間)の設定方法を知りたい。
回答を見る
  • ベストアンサー

度々すいません、Javaについて質問なんですが

前回回答してくださった皆様、ありがとうございました。 現在、Javaで簡単なモグラ叩きゲームを作っており、リトライボタンを追加 しようと思っているのですが、なぜか上手くボタンが表示されません・・・何故で しょうか? また、マウスのクリック待ち時間(クリック制限時間)を作りたいのですが、どのようにすれば よいでしょうか? ソースは以下の通りです。(※字数制限に引っかかった、未使用のイベントなどは省略していますがご了承ください※) import java.awt.*; import java.awt.event.*; import java.util.Random; class mole_hit extends Frame implements MouseListener, ActionListener, MouseMotionListener { int mole_point; //土竜の出現データ int fore_mole_point; //土竜の前の出現データ int mole_x, mole_y; //土竜の出現座標 int mouse_x, mouse_y; //マウスの座標 int life = 10; long t = 1000; MyCanvas mc = new MyCanvas(); public static void main(String[] args) { new mole_hit(); } mole_hit() { super("土竜叩きゲーム"); //フレーム名 setSize(700, 700); //フレームサイズ setLayout(null); if (life <= 0) //ライフが0以下になったら、 { //リトライボタンを表示 Button b = new Button("RETRY"); b.addActionListener(this); b.setSize(50, 25); b.setLocation(620, 620); add(b); } mc.setSize(600, 600); //キャンバスサイズ mc.setLocation(0, 0); //キャンバス配置座標 mc.addMouseListener(this); mc.addMouseMotionListener(this); add(mc); setVisible(true); addWindowListener(new Close()); //ウィンドウクローズ } /*** ボタン等のイベント ***/ public void actionPerformed(ActionEvent e) { life = 10; mc.repaint(); } /*** マウスボタンが押されたとき ***/ public void mousePressed(MouseEvent e) { mouse_x = e.getX(); mouse_y = e.getY(); System.out.println("(" + mouse_x + "," + mouse_y + ")"); //マウス座標確認用 mc.repaint(); } /*** キャンバス ***/ public class MyCanvas extends Canvas { /*** 描画ステータス ***/ public void paint(Graphics g) { super.paint(g); int line_x, line_y; //ライン描画用変数 int hall_x, hall_y; //ホール描画 int i, j; //ループ用変数 Dimension size = getSize(); //ウインドウのサイズを取得 Sleep s = new Sleep(); //スリープ用メソッド Random rnd = new Random(); Color brown = new Color(160, 0, 0); //茶色 /*** ライフがあるとき ***/ if (life > 0) { /***** 背景色を青にする *****/ g.setColor(Color.blue); g.fillRect(0, 0, size.width, size.height); /*** ボックスの背景色を設定 ***/ g.setColor(Color.green); g.fill3DRect(100, 100, 300, 300, true); /***** 縦軸・横軸を描画*****/ line_x = 100; line_y = 100; g.setColor(Color.red); /*** 縦軸を描画 ***/ for (i = 0; i < 4; i++) { g.drawLine(line_x, 100, line_x, 400); line_x += 100; } for (i = 0; i < 4; i++) { g.drawLine(100, line_y, 400, line_y); line_y += 100; } /*** 土竜の出現するボックスを描画 ***/ g.setColor(Color.black); hall_y = 130; for (i = 0; i < 3; i++) { hall_x = 115; for (j = 0; j < 3; j++) { g.fillOval(hall_x, hall_y, 75, 40); hall_x += 100; } hall_y += 100; } do { fore_mole_point = rnd.nextInt(9); } while(mole_point == fore_mole_point); mole_point = fore_mole_point; switch(mole_point) { case 0: mole_x = 125; mole_y = 135; break; case 1: mole_x = 225; mole_y = 135; break; case 2: mole_x = 325; mole_y = 135; case 3: mole_x = 125; mole_y = 235; break; case 4: mole_x = 225; mole_y = 235; break; case 5: mole_x = 325; mole_y = 235; break; case 6: mole_x = 125; mole_y = 335; break; case 7: mole_x = 225; mole_y = 335; break; case 8: mole_x = 325; mole_y = 335; break; default: break; } g.setColor(brown); g.fillOval(mole_x, mole_y, 50, 25); if (mole_x <= mouse_x && mole_y <= mouse_y && mole_x + 50 >= mouse_x && mole_y + 25 >= mouse_y) { /*** 成功時アクション ***/ g.setColor(Color.red); g.fillOval(mole_x, mole_y, 50, 25); } s.Sleep(500); life--; } /*** ライフが無いとき ***/ if (life <= 0) { g.setColor(Color.red); g.fillRect(0, 0, size.width, size.height); g.setColor(Color.blue); g.drawString("GAME-OVER(´・ω・`)", 250, 300); } } } }

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • cpen
  • ベストアンサー率58% (18/31)
回答No.2

んー・・・コードが汚い。。。 ただ、ボタンを直したいだけなら↓をすれば動きますが、綺麗に書き直したほうがいいです。 paintの中で土竜の場所を決めると、ウィンドウを最小化して戻したら違う場所に移るし。 if (life <= 0)//ライフが0以下になったら、 {//リトライボタンを表示 Button b = new Button("RETRY"); b.addActionListener(this); b.setSize(50, 25); b.setLocation(620, 620); add(b); } の部分を if 無しで。 (lifeは最初に10にしてるんだから、中のコードは実行されないし) resetButton = new Button("RETRY"); resetButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { life = 10; mc.repaint(); resetButton.setVisible(false); } }); resetButton.setSize(50, 25); resetButton.setLocation(620, 620); resetButton.setVisible(false); add(resetButton); にして (& private Button resetButton; をメンバー変数にして) MyCanvasのpaintで /*** ライフが無いとき ***/ if (life <= 0) { resetButton.setVisible(true);  ←を足す。

pocket0173
質問者

お礼

上手く動作しました! 自分のコード汚いんですか・・・今まで指摘された事なかったから 知らなかった ご指摘有難うございます。以降気をつけて書いてみます・・・。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なんでコンストラクタでボタンを作っているのかが理解できませんが.... 「上手くボタンが表示されません」というところ, もっと具体的に「どうなるつもりで書いてどう『上手く表示されない』のか」を書けませんか?

関連するQ&A

  • C言語にて至急質問!!

    授業でゲーム作成してますがタイム表示とえさの残り数表示と残りのライフ表示 のプログラムがわかりません プログラムは下にあります #include<stdio.h> #include<stdlib.h> #include<time.h> #include"utility.h" int map[25][40]; typedef struct{ int x; int y; int life; int col; }CHAR; void disp(int,int); void main(void) { FILE *fp; CHAR man,mapsize,teki[5]; int i,j,cnt = 0,x,y,flg,wx,wy,stime = 0,etime = 0 ; GetConsoleHandle( ); srand(time(NULL)); fp = fopen("map.txt","r"); if(fp == NULL){ printf("ファイルエラー\n"); return; } fscanf(fp,"%d %d",&mapsize.y,&mapsize.x); fscanf(fp,"%d %d",&man.y,&man.x); wy = man.y; wx = man.x; fscanf(fp,"%d" "%d",&y,&x); for(i = 0;i < mapsize.y;i++) for(j = 0;j < mapsize.x;j++){ fscanf(fp,"%d",&map[i][j]); if(map[i][j] == 1) cnt++; } fclose(fp); disp(mapsize.x,mapsize.y); Locate(man.x * 2 +10,man.y + 3); printf("Э"); if(map[man.y][man.x] == 1){ cnt--; map[man.y][man.x] = 0; } man.life = 10; man.col = 0x0e; for(i = 0;i < 5;i++){ teki[i].y = y; teki[i].x = x; teki[i].life = 1; teki[i].col = rand() % 7 + 9; } while(cnt && man.life){ Wait(100); if(KeyCheck(ESCAPE)) break; Locate(man.x * 2 + 10,man.y + 3); SetColor2(0x00); printf(" "); if(KeyCheck (LEFT) && map[man.y][man.x - 1] != 9){ man.x--; } if(KeyCheck (RIGHT) && map[man.y][man.x + 1] != 9){ man.x++; } if(KeyCheck (UP) && map[man.y - 1][man.x] != 9){ man.y--; } if(KeyCheck (DOWN) && map[man.y + 1][man.x] != 9){ man.y++; } flg = -1; for(i = 0;i < 5;i++){ if(man.y == teki[i].y && man.x == teki[i].x) flg = i; } if(flg == -1){ if(map[man.y][man.x] > 9){ j = map[man.y][man.x]; man.x = j / 100; man.y = j % 100; } if(map[man.y][man.x] == 1){ cnt--; map[man.y][man.x] = 0; } else if(map[man.y][man.x] == 2){ map[man.y][man.x] = 0; stime = time(NULL); etime = stime + 10; } }else{ stime = time(NULL); if(stime < etime){ teki[flg].life--; if(map[teki[flg].y][teki[flg].x] == 1){ map[teki[flg].y][teki[flg].x] = 0; cnt--; }else if(map[teki[flg].y][teki[flg].x] == 2){ map[man.y][man.x] = 0; stime = time(NULL); etime = stime + 10; } }else{ man.life--; SetColor(0x0f); Locate(60,3); Locate(teki[flg].x * 2,teki[flg].y); SetColor2(teki[flg].col); printf("Ψ"); man.x = wx; man.y = wy; Wait(3000); Locate(man.x * 2 + 10,man.y + 3); SetColor2(man.col); printf("Э"); } } Locate(man.x * 2 + 10,man.y + 3); SetColor2(man.col); printf("Э"); for(i = 0;i < 5;i++){ if(teki[i].life == 1){ Locate(teki[i].x * 2 + 10,teki[i].y +3); switch(map[teki[i].y][teki[i].x]){ case 0:SetColor2(0x0f); printf(" "); break; case 1:SetColor2(0x0f); printf("・"); break; case 2:SetColor2(0x0c); printf("♪"); break; } j = rand() % 4; if(j == 0 && map[teki[i].y - 1][teki[i].x] != 9){ teki[i].y--; } if(j == 1 && map[teki[i].y][teki[i].x + 1] != 9){ teki[i].x++; } if(j == 2 && map[teki[i].y + 1][teki[i].x] != 9){ teki[i].y++; } if(j == 3 && map[teki[i].y][teki[i].x - 1] != 9){ teki[i].x--; } Locate(teki[i].x * 2 + 10,teki[i].y + 3); stime = time(NULL); if(stime < etime) SetColor2(teki[i].col << 4); else SetColor2(teki[i].col); printf("Ψ"); }else{ stime = time(NULL); if(stime >= etime){ teki[i].life = 1; teki[i].y = y; teki[i].x = x; } } } } } void disp(int x,int y){ int i,j; for(i = 0;i < y;i++){ for(j = 0;j < x;j++){ Locate(j*2 + 10,i + 3); switch(map[i][j]){ case 0:SetColor2(0x00); printf(" "); break; case 1:SetColor2(0x0f); printf("・"); break; case 2:SetColor2(0x0c); printf("♪"); break; case 9:SetColor2(0x99); printf("■"); break; default:SetColor2(0x0d); printf(" "); } } } } このどこかに質問したプログラムがはいるかもおしえてほしいです。 至急回答をどうかおねがいします

  • javaのrepaint()について

    Java初心者です。 現在、アニメーションで少々つまずいています・・・ソースは以下の通りです。 import java.awt.*; import java.awt.event.*; public class test04 extends Frame implements KeyListener { public int x = 10, y = 10; public static void main(String[] args) { new test04(); } test04() { super("KeyFrameTest"); //フレーム名 setSize(200, 200); //フレームサイズを設定 MyCanvas mc = new MyCanvas(); mc.addKeyListener(this); add(mc); setVisible(true); //フレームを表示 addWindowListener(new Close()); //クローズ処理 } /*** キーが押されているとき ***/ public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key) { case 37: //← x--; break; case 38: //↑ y--; break; case 39: //→ x++; break; case 40: //↓ y++; break; } System.out.println("(" + x + "," + y + ")"); } /*** キーが離されたとき ***/ public void keyReleased(KeyEvent e) { } /*** キーが押された瞬間 ***/ public void keyTyped(KeyEvent e) { } /*** キャンバス用クラス ***/ class MyCanvas extends Canvas { /*** 描画ステータス ***/ public void paint(Graphics g) { g.setColor(Color.red); g.fillRect(x, y, 20, 20); repaint(); } /*** ペイント処理 ***/ //勝手に点滅するのを回避するため public void update(Graphics g) { paint(g); } } } /*** クローズクラス ***/ class Close extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } /*** スリープクラス ***/ class Sleep extends Thread { public void Sleep(long milli) { try { Thread.sleep(milli); } catch(Exception e) { } } } ↑のプログラムを実行すると、押したキーに対応する動作はするのですが、 前に描画した残像が残ってしまい、上手くいきません・・・repaint()の位置を変えてみたり したら、今度はボックスが動かなくなってしまい、訳が分からなくなって来ました・・・何故 上手くいかないんでしょうか? 理想的な動作としては、押したキーに対応した動作をし、残像も残らないようにしたいです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 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; } } }

  • JAVAのアプレットのアニメーションの質問

    javaのアプレットに関する質問なんですが、今次の条件でアニメーションを作っているんですが、どうしても解決できない問題があります。 赤い長方形が左から右に動いていくプログラムを作成する。 ・ 長方形が描画領域 の右端に消えると左端から再 度出現するようにせよ。 ・ Reverseと書かれたボタンを押すと長方形の進行方 向が左右反対になる。 ・ このとき、左右どちらの端に長方形が消えた場合も 反対端から長方形は出現する。 ・ 長方形をクリック(ボタン押下)すると長方形の色が 変化する。 ・ 赤い長方形であれば青に、青い長方形であれば赤 に変化する。 この条件でつくろうと思っているのですが、長方形をクリックしたときに、色の変化がどうしてもできません。どこに問題があるか分かりません。御教授お願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.Button; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; public class Report2 extends Applet implements Runnable,ActionListener,MouseListener{ int x=100; int y=50; int width=80; int height=120; int dir=-2; int w; int z; Button bt; boolean direction; boolean colorRed; public void actionPerformed(ActionEvent ae){ if(direction==true){ direction=false; } else{ direction=true; } } public void init(){ bt=new Button("Reverse"); add(bt); bt.addActionListener(this); Thread th; th =new Thread(this); th.start(); addMouseListener(this); } public void mouseClicked(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mousePressed(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void run() { while(true){ x++; if(x==400){ x=-80; } if(direction==true){ x=x+dir; } else{ } repaint(); try{ Thread.sleep(30); } catch(InterruptedException e){} } } public void paint(Graphics g){ g.setColor(Color.white); g.fillRect(0,0,400,200); g.setColor(Color.red); g.fillRect(x,y,80,120); if(colorRed=true){ g.setColor(Color.red); } if(colorRed=false){ g.setColor(Color.blue); } g.fillRect(x,y,width,height); g.setColor(Color.black); g.fillRect(x,y,10,10); } }

    • ベストアンサー
    • Java
  • ペイントソフトでキャンバス内にだけにかけるようにしたいです。

    どうしたらいいのかわからいので、何かヒントでiいので教えてください。 import java.applet.*; import java.awt.*; import java.awt.event.*; /* <APPLET CODE ="Mous" WIDTH = 500 HEIGHT = 300> </APPLET> */ public class Mous extends Applet { Graphics g; int point_x, point_y; Button color_black,color_red,color_blue,clear; public void init() { g = getGraphics(); setLayout(null); addMouseListener(new MouseAdapter () { public void mousePressed(MouseEvent e){ point_x = e.getX(); point_y = e.getY(); } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { g.drawLine(point_x,point_y,e.getX(),e.getY()); point_x = e.getX(); point_y = e.getY(); } }); color_black = new Button("黒"); color_black.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.black); } }); color_red = new Button("赤"); color_red.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.red); } }); color_blue = new Button("青"); color_blue.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.blue); } }); clear = new Button("クリアー"); clear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.clearRect(0,0,500,300); } }); add(color_black); add(color_red); add(color_blue); add(clear); } }

  • プログラムの画面表示のことで

    このような場面で、プレイヤーが倒されてしまったときに、 HPが0にならずに、残ってしまいます。 処理が上から下に向かって動いているためだと思いますが、 プレイヤーやモンスターが倒れた時に、画面の構成を変えずに、 HPを0にすることができるでしょうか? int main(void) { system("cls"); //クリアー dungeon( /* 略 */); //ダンジョン表示(ステータスの表示) player_turn( /* 略 */);//キー入力(プレイヤーのターン) monster_turn( /* 略 */); //モンスターのターン } return 0; } //ダンジョン表示 void dungeon(PC *pc, MC *mc) { for(y=0; y<10; ++y){ for(x=0; x<10; ++x){ if(pc->y==y && pc->x==x){ printf("%s", "@"); }else if((mc->y==y) && (mc->x==x) && (mc->hp>=0)){ printf("%s", "Sk"); }else if(field[y][x]==9){ printf("%s", "■"); }else if(field[y][x]==8){ printf("%s", "□"); }else if(field[y][x]==7){ printf("%s", "<"); }else{ printf("%s", " "); } } status(pc, mc, y); //ステータスのある場所 printf("\n"); } } //ステータス表示 void status(PC *pc, MC *mc, int y) { switch(y) { case 0:printf(" *****************************");break; case 1:printf(" %s Lv%3d HP%3d %3dG", pc->name, pc->lv, pc->hp, pc->gold);break; case 2:break; case 3:break; case 4:break; case 5:break; case 6:break; case 7:break; case 8:printf(" %s Lv%3d HP%3d %3dG", mc->name, mc->lv, mc->hp, mc->gold);break; case 9:printf(" *****************************");break; default:break; } }

  • sin曲線とcos曲線を描くプログラムについて

    お世話になります。 Javaのプログラミングを習い始めたものです。 標記の件ですが、プログラムを見てもどうしてそうなるかが さっぱりわからない部分があります。 import java.awt.*; import java.applet.*; public class Example2 extends Applet{ public void paint(Graphics g){ // 座標軸を描く g.drawLine(20, 10, 20, 130); g.drawLine(20, 70, 230, 70); // sinカーブを描く(20->220) g.setColor( Color.blue); int x0, y0, x1, y1; x1 = 20; y1 = 70; for (int i = 1; i <= 20; i++){ x0 = x1; y0 = y1; x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI)); g.drawLine(x0, y0, x1, y1); } // cosカーブを描く(20->220) g.setColor( Color.red); x1 = 20; y1 = 20; for (int i = 1; i <= 20; i++){ x0 = x1; y0 = y1; x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.cos(i/20.0*2*Math.PI)); g.drawLine(x0, y0, x1, y1); } } これで、赤と青の曲線が描かれるわけですが、 x1 = 20+(int)(i/20.0*200); y1 = 70-(int)(50.0*Math.sin(i/20.0*2*Math.PI)); の部分がさっぱりわかりません。 今まで、"int"は変数宣言でしか用いられなかったのに、 今回突然この式の中に組み込まれており困惑しています。 また、iが回数を表すのはわかりますが、それを全回数で割ったり、 x1の式の中でなぜ200を掛けるのか、 y1の式の中でなぜ2を掛け、さらに円周率まで掛けるのかが どうしても理解できません。 どなたか、ご教授願えませんでしょうか。 あるいは、参考になるサイトを教えていただければ助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • Javaのswingについて質問です。

    public class Enshu12 extends JApplet { private JLabel lb1; private JLabel lb2; int num=0; int now=0; public void init() { lb1=new JLabel("数字を入力してください。"); lb2=new JLabel(""+num+""); add(lb1,BorderLayout.NORTH); add(lb2,BorderLayout.SOUTH); addKeyListener(new SampleKeyListener()); } public class SampleKeyListener extends KeyAdapter { int i; public void keyPressed(KeyEvent e) { char c=e.getKeyChar(); int mod=e.getModifiersEx(); if(mod==InputEvent.SHIFT_DOWN_MASK||c=='-'||c=='/'){ select(c); } else{ inputNum(c); calc(); lb2.setText(""+num+""); } } public void select(char c) { switch(c){ case '+': now=1;lb1.setText("足し算をします。数字を入力して下さい。");break; case '-':now=2;lb1.setText("引き算をします。数字を入力してください。");break; case '*':now=3;lb1.setText("かけ算をします。数字を入力して下さい。");break; case '/':now=4;lb1.setText("割り算をします。数字を入力して下さい。");break; } } public void inputNum(char c) { switch(c){ case '0': i=0;break; case '1': i=1;break; case '2': i=2;break; case '3': i=3;break; case '4': i=4;break; case '5': i=5;break; case '6': i=6;break; case '7': i=7;break; case '8': i=8;break; case '9': i=9;break; } } public void calc() { switch(now){ case 1: num=num+i; break; case 2: num=num-i; break; case 3: num=num*i;break; case 4: num=num/i; break; default : num=i; break; } } } 簡単な電卓を作り電卓機能としてはできたのですが、数字と演算子を交互に入力させたいため、数字または演算子の入力が連続入力された場合は例外処理をさせたいのですが、例外のクラスは作るとしてどのような仕組みにしたら良いでしょうか?単純にbooleanでそれぞれの切り替えをするとうまく動きません・・><教えてください。

    • ベストアンサー
    • Java
  • javaのエラーの意味がわかりません、お願いします

    今日は、javaを勉強している初心者です。 以下のコードを書いてやりましたが、「sleep(Graphics)は引数()に適用できません」、「Color.Whiteを解決できません」とエラーがでます、エラーの意味が分かりません。 一体何処が間違っているのでしょうか、宜しくお願いします。 ===================================================================== public class ani_Moving_Ball extends Applet { int x; public void paint(Graphics g) { for(x=0 ; x<180 ; ++x) { clear(g); g.drawOval(x,90,19,19); sleep(); } } public void clear(Graphics g) { g.setColor(Color.White); g.fillRect(0,80,200,40); g.setColor(Color.Black); } public void sleep(Graphics g) { double s=0.0; for (int j=1 ; j<100 ; ++j) { for (int k=1 ; k<100 ; ++k) { s =+ Math.sin((double)j); } } } }

    • ベストアンサー
    • Java
  • javaの図形なのですが

    javaの図形なのですが、結果が球の形にそってぐるぐるっと リンゴの皮むきのような感じの線になるはずなのですが動かない、 というよりもどこを修正すればいいのか見当もつかずさまよっています。正直、助けていただきたいです。 たぶん抜けてるところがあるはずなんですが、何が抜けてて何を入れれば良いかわからないので教えてほしいです。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ui {public static void main(String[] args) { JFrame jf = new JFrame("ui"); MyCanvas mc = new MyCanvas(); mc.setPreferredSize(new Dimension(700,700)); jf.getContentPane().add(mc); jf.pack(); jf.setVisible(true); } } class MyCanvas extends JPanel { static double [][] p = { {ここに数値を入れるのですが多いので投稿できないので省きます} }; double _xa = 30; double _ya = 40; int doX, doY; public void paintComponent( Graphics g ) { super.paintComponent(g); setBackground(Color.black); g.setColor(Color.white); disp_3Dobj(_xa, _ya, getWidth()/2, getHeight()/2, g);( } void disp_3Dobj(double xa, double ya, int px, int py, Graphics g) { int [] p2d; int n = p[0].length; for (int i = 0; i < n; i++) { } } int [] get2Dpos(double x, double y, double z, double xa, double ya, int px, int py) { final double D2Rad = Math.PI/180.0; double a = xa*D2Rad, b = ya*D2Rad; double x1, y1, zt; double sinA = Math.sin(a), sinB = Math.sin(b); double cosA = Math.cos(a), cosB = Math.cos(b); int [] pos = new int[2]; x1 = x*cosB + z*sinB; zt = -x*sinB + z*cosB; y1 = y*cosA - zt*sinA; pos[0] = px+(int)Math.rint(x1); pos[1] = py-(int)Math.rint(y1); return pos;}}

専門家に質問してみよう