• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:初心者です 三角形を描きます)

初心者が三角形を描く方法

このQ&Aのポイント
  • 初心者が三角形を描く方法について教えてください
  • Triangleクラスにおいて、g.fillTriangle()の引数に何を指定すれば良いのか分かりません
  • お願いします

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

  • ベストアンサー
  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.2

 以下のように追加/変更すれば三角形が表示されます。 import java.awt.*; import java.awt.event.*; class Triangle { Paint pat; int xpoints0, ypoints0, xpoints1, ypoints1, xpoints2, ypoints2; public Triangle(Paint p, int x0, int y0, int x1, int y1, int x2, int y2) { pat = p; xpoints0 = x0; ypoints0 = y0; xpoints1 = x1; ypoints1 = y1; xpoints2 = x2; ypoints2 = y2; }; public void draw(Graphics2D g) { int x[] = {xpoints0, xpoints1, xpoints2}, y[] = {ypoints0, ypoints1, ypoints2}; g.setPaint(pat); // g.fillTriangle( ); g.fillPolygon(x, y, 3); }; } class drawtri extends Frame { Triangle T; public drawtri() { super("Draw Triangle"); setSize(200, 200); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); }; }); Paint pa = new GradientPaint((float)0.0, (float)0.0, Color.YELLOW, (float)0.0, (float)10.0, Color.GREEN, true); T = new Triangle(pa, 100, 50, 50, 150, 150, 150); }; public void paint(Graphics g) { T.draw((Graphics2D)g); }; public void update(Graphics g) { paint(g); }; public static void main(String args[]) { new drawtri(); }; }

その他の回答 (1)

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.1

他の方からもアドバイスされていて認識されているかと思われますが、 もう少し基本的なJavaのプログラミングから勉強を始められることを 私としてもお勧めします。 >g.fillTriangle( ); このようなメソッドを書いておられますが、Graphics2Dクラスには、 fillTriangle(...)というメソッドはありません。 これは、ご覧になっているサンプルプログラムの中で、Graphics2Dを継承または、 コンポジション実装して、fillTriangle(...)というメソッドを 独自に実装しているのだと思われます。 ですから、このメソッドに引数として何を渡すかはその作成された(部分の) プログラム(gの実体)がここでは全く分かりませんので誰も答えようがありません。 (少し不安なのは、サンプルプログラムならば、点を保持するために、  なぜjava.awt.geom.Point2Dクラスを利用していないかというところです。  サンプルとしては、ちょっとお粗末な気がしてしまいます。私の仮定が  正しくない可能性も十分にありますのでご了承ください) まずは、私としては次の3つのことお勧めします。 (1)統合開発環境を入手してその上でプログラミングをしてください。    (今時、クラス名やメソッド命をキーボードから逐一打ち込んだり、     javacコマンド等をコマンドラインで使ったりする利点は何もありません) (2)JavaDocを読む練習を行ってください。 (3)数値計算クラスを作って、数値を渡してその数値を処理(計算)して    値が戻ってくるような基本的なメソッドの書き方の練習から行ってください。    (その際、そのクラスを使って、インターフェースを書いたり、クラスを    継承したり、コンポジション実装したり、メソッドをオーバーライド    したりする方法もマスターしてください) (1)とは、Eclipse等のソフトウェアです。これらのエディターは入力と同時に 変数名のチェックやメソッドの入力アシスタント等を行ってくれますので 少なくても現在投稿されているレベルのミスは(コンパイルするまでもなく) 入力と同時に検出してくれます。 (2)とは、JavaDocは使用するクラスの冒頭部と当該メソッドの部分には 必ず目を通す必要があるということです。また、自分で作成された クラスに関しは、自身でJavaDocを書いておく必要もあります。 (統合開発環境を使えば、簡単に該当するJavaDovは開けます。  またJavaDoc作成時のアシスタント機能も充実しています) (3)とは、グラフィックス関係のプログラミングは、初心者でなくても 簡単な分野ではありません。というのも、デバッガでプログラムを途中で 停止させても最終的に目的の図形が画面に表示されないというような 問題のバグは、(想像できるでしょうが)非常に対処が難しいからです。 数値計算等で、手計算で処理過程を追っていけるようなプログラミングにおいて デバッガを使ってプログラミングの中を自由に飛び廻ってバグフィックスが できるようになってからグラフィックスプログラミングに挑戦されることが 断然近道であると思われます。 ここから先は、ご自身が初心者を脱したと思ったときに読んで下さい。 オブジェクト指向設計的には、g.fillTriangle(...)というように Graphics2Dクラスを継承したクラスに新たなメソッドを追加するよりも g.fill( new Triangle(...) )という風にメソッドを追加することなく Shapeインターフェースを実装(するためGeneralPathクラスをコンポジション実装) したTriangleクラスを作成してネイティブメソッドで描画させる方法が 格段に優れていると思われます。 この意味が何となくでも理解できれば、初心者は卒業でしょう。

関連するQ&A