• 締切済み

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

ある画像の上をマウスクリックするとそこに赤いマーカーが表示され、さらにそのマーカーの座標をテキスト形式で保存できるプログラムを組みたいと考えています。マーカー表示はできましたが、保存方法がまったくわかりません。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); } } }

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

みんなの回答

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.2

アプレットをローカルから実行するには、アプレットのクラスファイル(コンパイルしてできた xxx.xlass ファイル)と、 アプレットを読み出す HTML ファイルを同じディレクトリに入れて、ブラウザから HTML ファイルを開けばいいです。 アプレットに限らず、ファイルへ出力するプログラムは以下のようになります。 関連クラスの名前を インポートします import java.io.File; import java.io.FileWriter; 出力用のメソッドを追加します。 void dataWrite(String filename ) { FileWriter fw; fw = new FileWriter( filename ); for ( i = 0; i < xpos.length ; i++) { fw.println(xpos[i], "," ,ypos[i]); -----(1) } fw.close(); } ファイルへ書きたいタイミングで下のメソッドを実行します。 dataWrite("output.txt"); どのような形式で出力するかは、(1)で決まるので、適切な形に変えてください。 今回はファイルへテキスト出力ということで FileWriter を使いましたが、 そうでない場合はまたいくつかクラスを組み合わせますので、その時はまた調べてください。

exia_2006
質問者

お礼

丁寧に教えていただき、本当にありがとうございました。

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.1

アプレットは、セキュリティ上の問題でそれをロードしてきたサーバーとの通信はできますが、ローカルのファイルシステムにアクセスすることはできません。 ですから、ファイルにデータを保存をすることはできません。 これを解決する方法は3つあります。 1)データをサーバー側で保存する アプレットは自分がやってきたサーバーとは通信できるので、そちらに保存してもらう。 2)アプレットを一旦ローカルのファイルシステムへ保存し、それを実行する 一旦ディスクなどへ保存されたアプレットは信頼されたことになり、ローカルのファイルシステムへアクセスできます。 3)証明書を使う アプレットへ署名をし、署名に対応する証明書を、アプレットを実行するブラウザに取り込む。 ファイルへの保存方法以前に、この問題もクリアしなければなりません。 どの方法で行きますか?

exia_2006
質問者

お礼

bnosuke-xさん 早速のお返事、本当にありがとうございます。 普通にやっては保存できないのですね。 「2)一旦ローカルファイルシステムへ保存する方法」を使ってやってみたいのですが、どのようにすればよいでしょうか。 本当に初心者なもので、ご迷惑をおかけします。

関連するQ&A

  • 初心者です。 コンパイルのエラー

    import java.awt.*; import javax.swing.*; public class R11Sample1 extends JFrame { Rect r1 = new Rect(Color.red, 100, 100, 80, 60); Rect r2 = new Rect(new Color (0.5f, 1f, 0f, 0.7f), 150, 120, 60, 90); Oval = new Oval(Color.blue, 60, 50, 10, 10); JPanel panel = new JPanel() { public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; r1.draw(g2); r2.draw(g2); } }; public R11Sample1() { setSize(400, 350); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(panel); } public static void main(String[] args) { new R11Sample1().setVisible (true); } } class Rect { Paint pat; int xpos, ypos, width, height; public Rect(Paint p, int x, int y, int w, int h) { pat = p; xpos = x; ypos = y; width = w; height = h; } public void draw(Graphics2D g) { g.setPaint(pat); g.fillRect(xpos-width/2, ypos-height/2, width, height); } } class Oval { Paint pat; int xpos, ypos, radius; public Oval(Paint p, int x, int y, int width, int height) { pat = p; xpos = x; ypos = y; width = w; height = h; } public void draw(Graphics2D g) { g.setPaint(pat); g.fillOval(xpos-width/2, ypos-height/2, width, height); } } これでコンパイルすると、 Identifierがありません といわれました。 どこを直せばいいのでしょうか。 また、全体的に間違ったところがあったら教えてください。

    • ベストアンサー
    • Java
  • 初心者です。Circle

    class Circle { Paint pat; int xpos, ypos, radius; public Circle(Paint p, int x, int y, int r) { pat = p; xpos = x; ypos = y; radius = r; } public void draw(Graphics2D g) { g.setPoint(pat); g.fillCircle(xpos-radius, ypos-radius, radius); } } というソースを作りましたが、 コンパイルの際に 以下のエラーが出ます。 シンボルを見つけられません シンボル:メソッド fill Circle(int,int,int) 場所:g.fillCircle(xpos-radius, ypos-radius, radius); どこが間違っていて、どう直せばいいのか、教えてください。 お願いします。

  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • 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アプレットでの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のアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • 【アプレット】マウスイベントについて

    【アプレット】マウスイベントについて 現在、マウスに円をリンクさせています 1回左クリックするとその場所で円が停止し、もう1回左クリックするとまた動きだし、もう1回左クリックするとその場所で円が停止し、・・・の繰り返しを行いたいです なにかアドバイスをください。 作ってるのに近いプログラム ↓ import java.applet.* ; import java.awt.*; import java.awt.event.*; public class test extends Applet { int posX = 50; int posY = 50; public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(posX, posY, 50, 50); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void init () { this.setSize(200, 200); this.setVisible(true); addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { posX = e.getX(); posY = e.getY(); repaint(); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } }); } }

  • アプレットについて

    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アプレット】マウスにリンクした雪だるまを回転させたい

    【javaアプレット】マウスにリンクした雪だるまを回転させたい 現在、大小の丸2つで簡単に作った雪だるまをマウスにリンクすることができました。 マウスを右に動かせばそのまま雪だるまも右に動きます。 ここからがわかりません。 理想的には雪だるまは大きい丸を中心に回転させながらマウスの動かす方向に動く感じにしたいのです。 なにかアドバイスをください。 作ってるのに近いプログラム ↓ import java.applet.* ; import java.awt.*; import java.awt.event.*; public class test extends Applet { int posX = 50; int posY = 50; public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(posX, posY, 50, 50); } public void init () { this.setSize(200, 200); this.setVisible(true); addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { posX = e.getX(); posY = e.getY(); repaint(); } }); } }

  • 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

専門家に質問してみよう