ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの座標を表示するプログラム

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは。お時間ある方いらっしゃったら是非教えてください。
以前このコミュで「画面をクリックすると●が表示されるプログラム」を教えていただいたんですが、今度はその●の座標を表示したいんです。

イメージとしてはx軸、y軸の線があって交差しているところにマウスをドラッグすると画面のどこかに(0,0)が表示されていて、マウスを動かすと連動的に座標が変わっていって、クリックした時点の座標が●の上に表示されるような感じです。←分かりづらかったら指摘してください。

中心の座標を定義しなければいけないのか、またはそのような関数があるのか、全くわかりません(>_<)
分かる方いらっしゃいましたらよろしくお願いしますm(_ _)m


※以前のトピでたくさんの方から指導していただいた結果、以下のような感じになりました。以前コメントしてくれた方、どうもありがとうございました^^


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*
<applet code="JaMous2.class"width=300 height=300>
</applet>
*/

public class JaMous2 extends Applet implements MouseListener,MouseMotionListener{
int [] x = new int[100];
int [] y = new int[100];
int x1=-1;
int y1;
int count, i;

//リスナの登録
public void init(){
addMouseListener(this);
addMouseMotionListener(this);
count = 0;
}

//●の定義
public void paint(Graphics g){
for(i=0; i<count; i++){
g.fillArc(x[i]-12,y[i]-12, 30, 30, 0, 360);
}
if(x1!=-1){
g.fillArc(x1-12,y1-12,30,30,0,360);
}
}

public void mouseEntered(MouseEvent me){
}
public void mouseExited(MouseEvent me){
}
public void mouseClicked(MouseEvent me){
}

//マウスを押すと●が出現
public void mousePressed(MouseEvent me){
x1 = me.getX();
y1 = me.getY();
repaint();
}

//マウスを放した場所に●を記録
public void mouseReleased(MouseEvent me){
if(count < 100){
x[count] = me.getX();
y[count] = me.getY();
count ++;
repaint();
}
}

//マウスを押してる間●を動かせる
public void mouseDragged(MouseEvent me){
x1 = me.getX();
y1 = me.getY();
repaint();
}

public void mouseMoved(MouseEvent me){
}
}

コメント(4)

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*
<applet code="JaMous2.class"width=300 height=300>
</applet>
*/

public class JaMous2 extends Applet implements MouseListener,MouseMotionListener{
 int [] x = new int[100];
 int [] y = new int[100];
 int x1=-1;
 int y1;
 int count, i;

 int lineX = 0;
 int lineY = 0;
 Label label;
 
 //リスナの登録
 public void init(){
  addMouseListener(this);
  addMouseMotionListener(this);
  count = 0;
  
  // マウスの座標を表示するラベル
  label = new Label("x:xxxx, y:yyyy", Label.CENTER);
  add(label);
 }

 //●の定義
 public void paint(Graphics g){
  // 縦線、横線
  if(lineX != 0 && lineY != 0) {
   Dimension d = getSize();
   g.setColor(Color.red);
   g.drawLine(lineX, 0, lineX, d.height);
   g.drawLine(0, lineY, d.width, lineY);
  }
  
  for(i=0; i<count; i++){
   g.setColor(Color.black);
   g.fillArc(x[i]-15,y[i]-15, 30, 30, 0, 360);
   // 座標描画
   drawPoint(g, x[i], y[i]);
  }
  if(x1!=-1){
   g.setColor(Color.black);
   g.fillArc(x1-15,y1-15,30,30,0,360);
   // 座標描画
   drawPoint(g, x1, y1);
  }
 }
 
 // 座標を描画する
 private void drawPoint(Graphics g, int x, int y) {
  Dimension d = getSize();
  FontMetrics fm = g.getFontMetrics();
  g.setColor(Color.magenta);
  String xy = x + "," + y;
  // 描画する場所を特定
  // x
  int sx = x - (fm.stringWidth(xy) / 2);
  // 左端がはみ出た場合
  if(sx <= 0) sx = 0;
  // 右端がはみ出た場合
  if(sx + fm.stringWidth(xy) >= d.width) sx = d.width - fm.stringWidth(xy);
  
  // y
  int moveY = ((fm.getAscent() + fm.getDescent()) / 2) - fm.getDescent();
  int sy = y + moveY;
  // 上がはみ出た場合
  if(sy - fm.getAscent() <= 0) sy = fm.getAscent();
  // 下がはみ出た場合
  if(sy >= d.height) sy = d.height - fm.getDescent();
  
  g.drawString(xy, sx, sy);
 }

 public void mouseEntered(MouseEvent me){
 }
 public void mouseExited(MouseEvent me){
 }
 public void mouseClicked(MouseEvent me){
 }

 //マウスを押すと●が出現
 public void mousePressed(MouseEvent me){
  x1 = me.getX();
  y1 = me.getY();
  repaint();
 }

 //マウスを放した場所に●を記録
 public void mouseReleased(MouseEvent me){
  if(count < 100){
   x[count] = me.getX();
   y[count] = me.getY();
   count ++;
   repaint();
  }
 }

 //マウスを押してる間●を動かせる
 public void mouseDragged(MouseEvent me){
  x1 = me.getX();
  y1 = me.getY();
  repaint();
 }

 // マウスの座標を取得してラベルに表示
 public void mouseMoved(MouseEvent me){
  lineX = me.getX();
  lineY = me.getY();
  label.setText("x:"+lineX+" y:"+lineY);
  repaint();
 }
}
(コ´ω`ジ)ノ さん
コメントありがとうございます!

自分でもなんとか形にすることはできたんですが、クォリティが全然違いますねぴかぴか(新しい)
このプログラムを参考にして自分のをブラッシュアップしていきたいと思います。
どうもありがとうございました^^
課題出来ないのに品質の何たるかが分かるんだ
クレタ人さん。
二つのプログラムを実際に動かして比較すれば明らかでした^^;

人のプログラムを見ただけで、これは質が高いなぁって評価してるわけではありませんよ手(パー)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング