• 締切済み

oval で真円を描画した場合

noname#30871の回答

noname#30871
noname#30871
回答No.1

 お使いのWindowsマシンのCRTの調整(画面の縦横サイズ)が合っていないのかもしれませんよ。  正方形と、それに内接する真円を描いて確認してみてください。

marsh
質問者

補足

解答、ありがとうございます。 >お使いのWindowsマシンのCRTの調整(画面の縦横サイズ)が合っていない それは、ありません。マックで描画したものをGIFファイルにして、アプレットの下に貼り付けてみましたが、GIFファイルは正常に表示されています。また、質問のところにも書きましたが、 void paint(Graphics g) { で描画したものは歪んでいません。 実験に使ったものは下記のものです。 /* * circles.java 2001/12/26 */ import java.awt.*; public class circles extends java.applet.Applet { Image offscr; Graphics offG; public void init() { } public void paint(Graphics g) { update(g); g.setColor(Color.red); for(int i = 0; i < 20; i++){ g.fillOval(i*25, 40, i, i); } } public void update(Graphics g) { offscr = createImage(500, 100); offG = offscr.getGraphics(); offG.setColor(Color.white); //make background offG.fillRect(0, 0, 500, 100); offG.setColor(Color.blue); for(int i = 0; i < 20; i++){ offG.fillOval(i*25, 20, i, i); } g.drawImage(offscr, 0, 0, this); offG.dispose(); } }

関連するQ&A

  • repaint処理が実行されなくなる時があります

    下記のように1秒周期で描画更新するように していますが、repaint処理が実行されなくなる ことがあります。repaintからupdateが呼び出されて いないことまでは判ったのですが、このような ことがあるのでしょうか?また、回避策があれば 教えて下さい。 ------------------------------------------------ public void run() { try { while ( m_bLoopFlag ) { repaint(); Thread.sleep( 1000 ); } } catch( Exception e ) { } finally { m_bEndFlag = true; } } public void update( Graphics g ) { paint( g ); }

    • ベストアンサー
    • Java
  • Graphicsクラスを使って描画履歴を残して、しかも色も選択しながら描画を行いたい

    以下のようなドロープログラムを作ってみたのですが 描画色を変更して再描画すると前の描画履歴が消えてしまいます 描画色を変更しても以前の描画履歴の消えないようにするには どのようにすればいいのでしょうか。 文字数制限によりプログラムをアップできませんでしたので一部を記述させていただきます。 グローバルなカラーオブジェクトを用意し class Globe{ static mycol=Color.white; } 二つのラベルを用意して Label red=new Label("■"); Label green=new Label("■"); ラベルそれぞれにマウスリスナーを登録して red.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.red; } }); green.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.green; } }); マウスドラッグによる座標取得を行い public void mouseDragged(MouseEvent e){ x=e.getX(); y=e.getY(); repaint(); } 二つの色を使い分けて描画できるようにしました。 public void update(Graphics g){ setForeground(Globe.mycol); g.fillOval(x-3,y-3,6,6); }

    • ベストアンサー
    • Java
  • ペイント時のチラツキ予防方法について

    現在、下記のpaint関数がrepaint関数を使って50ミリ秒きざみで呼ばれます。すると、画面がチラツクのです。 良い方法はありませんでしょうか? ちなみにdrawImageしている絵は最初の一回だけ描画して、 その絵の上にdrawStringを使ってミリ秒単位で字が書かれるのです。 ************************************************** public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("Song_ng"); }else{ //A描画 g.setColor(Color.black); g.setFont(FontA); g.drawString(strTitleA, 90, 25); //B描画 g.setColor(Color.black); g.setFont(FontB); g.drawString(strTitleB, 5, 55); //C描画 g.setColor(Color.black); g.setFont(FontC); g.drawString(strTitleC, 15, 85); //D描画 g.setColor(Color.black); g.setFont(FontD); g.drawString(strTitleD, 105, 120); } } ************************************************* 私なりに画面のチラツキ防止のためにupdate関数を下記のように修正したのですが、チラツキが良くはなりません。 ************************************************* public void update(Graphics g){ paint(g); } *************************************************

    • ベストアンサー
    • Java
  • VB.NETのグラフィック描画について

    グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な 目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、 X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics() でグラフィックオブジェクトを生成しても 描画できないのですがどのようにすれば解決できるでしょうか(イメージがわかり難いかもしれませんのでサンプルを書きました) よろしくお願いします (1)private sub pictureBox1_paint(Byval sender as Object, Byval e as system****** e.Graphics.DrawLine(****** (これは描画できる) End Sub (2)private sub zahyou() ' 座標を生成するサブルーチンプロシージャ dim i as integer for i=0 to 10 hyouji( i , i*5 ) End Sub private sub hyouji( x as integer, y as integer) ’直線を引くサブルーチンプロシージャ dim g As Graphics=pictureBox1.CreateGraphics() g.DrawLine(***,x,y**** (これは描画できない)

  • public void paint(Graphics g){

    public void paint(Graphics g){ g.setColor(new Color(ci, ci, ci)); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.WHITE); g.drawString("Canvas表示", 20, 20); g.drawImage(image, x1, y1, this); g.drawImage(image1, x2, y2, this); } public void update(Graphics g){ paint(g); } public void run(){         //while(true)で永久ループ //imageの座標を変更する処理         //repaint();     } スレッドを使ってイメージの座標を変更し、イメージが動くプログラムを作りました。 これだと滑らかに動かないからpaintメソッドをもうひとつ作って 処理するpaintと描画するpaintとにわけたらいいと言われました。 ですがやりかたがわからないので教えてください。

  • C# フォームサイズ変更で消えない描画の方法

    前略 ・C#の初心者です。 ・ボタンをクリックして作成した描画がウィンドウサイズを小さくして、再び元のサイズにした場合再描画されずに消えたまになってしまいます。消えない描画の方法をおしえてください。 ・下記はボタンをクリックするとピクチャーボックスに円を描くプログラムです。これだとウィンドウサイズを小さくしたあと、再びウィンドウを大きくしたとき円は消えたままです。 private void button1_Click(object sender, EventArgs e) { Graphics g = pictureBox1.CreateGraphics(); g.DrawEllipse(Pens.Black, 0, 0, 100, 100); } ・また下記はピクチャーボックスのペイントイベントを用いて円を描いたもので、フォームのサイズを小さくして円をかくした後フォームサイズを元にもどしても円は自動的に再描画されますが、プログラムが起動すると円が描画されてしまうプログラムです。 private void pictureBox1_Paint(object sender, PaintEventArgs e) {   Graphics g = e.Graphics; g.DrawEllipse(Pens.Black, 0, 0, 100, 100); } ★ ボタンをクリックすると円が描画され、ウィンドウを小さくして円を隠し、ウィンドウサイズをもとの大きさにもどした時自動的に再描画する方法をおしえてください。 以上、よろしくお願いします

  • javaの描画関係のプログラムの考え方について

    昔からあるJavaの基本的なグラフィックスのプログラム(下方のサンプル)の構造の基本についてお尋ねします。 プログラムの構成を言葉で言うなら、 1 クラスの設定 2 クラス内部のメソッドの作成(コンストラクタ、paint, main) (mainはメソッドとは言わないかもしれませんが、クラスの中の実働部隊のトップということでそういう位置づけにしました。) ここで疑問ですが、 疑問1 paintメソッドですが、どのようにして呼ばれていると考えるのでしょうか。プログラムの中で呼び出されていないように見えます。 mainの中のw.setVisible(true)とかw.show()が描画せよ、というトリガーだと思いますが、paintを動かせとはストレートには読めません。 w.paint() とかだとTestクラスのオブジェクトwのメソッドpaintを動かしているということが示されるわけですが。こういうのがないですね。 疑問2 mainの中のFrame w=new Test()はTest w=new Test()でも動作しますが、これはあまり気にしなくていいでしょうか。 ---- 以下はプログラムの構造です。--- import 適当に public class Test extends Frame{ public Test(){ クラスと同じ名前なのでコンストラクタですね。 setSize(300,300);ウィンドウのサイズ指定 addWindowListener() などいろいろウィンドウのセッティング ウィンドウの閉じ方とか 描画のためのキャンバスの用意 } public void paint(Graphics g){ g.drawLine(0,0,200,200); 描画本体 この部分をいろいろプログラミングする } public static void main(String[] args){ メインなのでここがスタートライン Frame w=new Test(); オブジェクトを作って // w.show(); w.setVisible(true); 描け } }

  • Javaのダブルバッファリングについてお伺いしたいのですが、

    Javaのダブルバッファリングについてお伺いしたいのですが、 Thred.sleep(20) ペイント部 public void paint(Graphics g) { g.drawImage(wbuffer, int x, int y, this); } アップデートメソッド public void update(Graphics g) { paint(g); } 他のクラスからもこのwbufferの中にいったん書き込むようにしています。 チラつきが出る要因として考えられるのはどんなことがあるのでしょうか? ・オブジェクトの数が多い というのが原因でしょうか。 だいたい5秒おきくらいにチラつきが生じます。

    • ベストアンサー
    • Java
  • 描画してもウィンドウをリサイズすると描画が消える

     アプレットで描画してもウィンドウをリサイズすると、描画が消えてしまいます。  これのどこにrepaint()、update()、paint()を入れてやれば良いのでしょうか。    本格的にプログラムの勉強をしようと考えているのですが、大阪、京都付近でjava、cとかを(出来れば個人教授のような 感じで)教えてくれる、スクールをご存知でしたら是非教えて下さい。 ____________________________________________________________ public class Q_Draw_Line extends Applet implements MouseListener , ActionListener { Graphics g; Color col; Button btnyellow; int mode; Button btncircle; Button btndot; 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 init() { g = getGraphics(); btnyellow = new Button("黄"); this.add(btnyellow); btnyellow.addActionListener(this); btncircle = new Button("円"); this.add(btncircle); btncircle.addActionListener(this); btndot = new Button("点"); this.add(btndot); btndot.addActionListener(this); this.addMouseMotionListener ( new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { int x = e.getX(); // X座標取得 int y = e.getY(); // Y座標取得 g.setColor(col); switch(mode) { case 1 : g.drawOval(x-20/2,y-20/2,20,20);break; case 2 : g.fillRect(x,y,5,5);break; } } } ); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == "黄") { col = Color.yellow; } if (e.getActionCommand() == "円") { mode = 1; } if (e.getActionCommand() == "点") { mode = 2; } } }

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

    • ベストアンサー
    • Java