- PR -

JAVA、グラフィックスについて

投稿者投稿内容
とも
会議室デビュー日: 2006/10/16
投稿数: 11
投稿日時: 2006-10-16 16:54
去年ちょっとだけJAVAを学習した学生です。
JAVAのグラフィックス(描画)で、たくさんの円を書こうとしています。
配列を使って描き、コンパイルしたところ
-----------------------------------------------
Application5.java:44: コードが大きすぎます。
public void paint( Graphics g ) {
^
エラー 1 個
-----------------------------------------------
と表示されました。
9000個近くのデータを入れたためでしょうか?
上限のようなものはあるのですか?
また、9000個描くのは不可能なのでしょうか?
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-10-16 17:04
単純な話、Javaのソースコードが大きすぎるときに
「コードが大きすぎます」のコンパイルエラーが発生します。

通常、多数のデータに基づき何かを行う場合、
データを与える方法を考えるのが通常です。
(テキストファイルなどの外部データを読み込んで利用するなど)

# そういえば小学生ぐらいのころにBASICで似たようなことやってたなぁ…
とも
会議室デビュー日: 2006/10/16
投稿数: 11
投稿日時: 2006-10-16 17:14
ご返信、ありがとうございます!!
ソースコードが大きすぎたんですね・・・。

テキストファイルから読み込んでの描画も考えたのですが、方法がわからず・・・
「配列でやっちゃえ」と言う気持ちで、全部ソースに入れてしまいました。
外部データを読み込むということは、BufferedReaderとかを使うんですか?
全然わかってなくてすみません;;;

小学生のころからBASICやってらっしゃったんですね!!
すごいです☆☆☆
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-10-16 19:18
引用:

テキストファイルから読み込んでの描画も考えたのですが、方法がわからず・・・
「配列でやっちゃえ」と言う気持ちで、全部ソースに入れてしまいました。
外部データを読み込むということは、BufferedReaderとかを使うんですか?
全然わかってなくてすみません;;;



java.io.FileReaderとjava.io.BufferedReaderを使うのが
比較的簡単なのかなぁ。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/FileReader.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/BufferedReader.html

コード:
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
    fileReader = new FileReader("ファイル名");
    bufferedReader = new BufferedReader(fileReader);
    String line = null;
    while((line = bufferedReader.readLine()) != null) {
        // ここで読み込んだ行の処理
        System.out.println(line);
    }
}finally{
    if (fileReader != null) {
        try {
            fileReader.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    if (bufferedReader != null) {
        try {
            bufferedReader.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}



I/Oのライブラリを使うときは例外処理を覚えないといけないのが壁ですね。
サンプルソースは探せばいくらでも転がっていると思いますよ。

# ソースは殴り書きなので動く保障はありません
とも
会議室デビュー日: 2006/10/16
投稿数: 11
投稿日時: 2006-10-18 14:17
昨日からずっと試しているのですが・・・苦戦しています。
java.io.FileReaderとjava.io.BufferedReaderから読み込んで、
「public void paint( Graphics g ) { 」内で、作図したこととかありますか?

サンプルソースも探しましたが、使えそうなものがありませんでした。
例外処理は、やはりないといけないものですか?

何度もすみません・・・。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-10-18 14:40
ファイルから取得しているのは、円の座標でしょうか?

public void paint( Graphics g ) {
g.drawOval(x1,y1,x2,y2)
}

で描画できます。
楽な方法としては、paintメソッド内でnagiseさんの書かれた処理を
やってしまうことですね。
指定したファイルが存在しなかったり、読み込み中にエラー
が発生することもあるので、例外は必要です。
とも
会議室デビュー日: 2006/10/16
投稿数: 11
投稿日時: 2006-10-18 16:49
はい!円の座標です。
txtファイルには、
10,20
10,50
40,30
みたいな感じで入っています。

ひらさんが書いてくれた
public void paint( Graphics g ) {
g.drawOval(x1,y1,x2,y2)
}
の、x1,x2のところに、どうやって対応(代入)させるかわかりません・・・。
       

>>楽な方法としては、paintメソッド内でnagiseさんの書かれた処理をやってしまうこと
ということは、paintメソッドの中に、
読み込みのjava.io.FileReaderとjava.io.BufferedReaderを入れればよいのでしょうか???

例外処理は、絶対いるんですね;;;
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-10-18 17:32
引用:

ともさんの書き込み (2006-10-18 16:49) より:
はい!円の座標です。
txtファイルには、
10,20
10,50
40,30
みたいな感じで入っています。

ひらさんが書いてくれた
public void paint( Graphics g ) {
g.drawOval(x1,y1,x2,y2)
}
の、x1,x2のところに、どうやって対応(代入)させるかわかりません・・・。
       

>>楽な方法としては、paintメソッド内でnagiseさんの書かれた処理をやってしまうこと
ということは、paintメソッドの中に、
読み込みのjava.io.FileReaderとjava.io.BufferedReaderを入れればよいのでしょうか???

例外処理は、絶対いるんですね;;;



paintメソッドでファイルを読みにいくのはちょっとマズイのでは。

1.事前に読み込んで変数に保管しておく
2.paint()時点で1.で読み込んでおいた変数の値で円を描く

となるでしょう。
大体、以下のようなイメージで。

コード:
import java.util.*;
import java.awt.*;
public class Hoge extends Frame {
    /** コンソールから起動する際に呼ばれる */
    public static void main(String[] args) {
        // インスタンス作成
        Hoge hoge = new Hoge();
        // 座標の保持用。java.awt.Pointオブジェクトを格納する
        List list = new ArrayList();
        // データの読みこみ処理
        // 略

        // 読み込んだデータを設定
        hoge.list = list;
        // フレームを表示する処理
        // 略
    }

    /** インスタンス変数 */
    private List list;
    /** paintのオーバーライド */
    public void paint(Graphics g) {
        for (int i=0; i<this.list.size(); i++) {
            Point p = (Point) this.list.get(i);
            // Pointを利用して円を描く
            // 略
        }
    }
}



とりあえず動かすレベルであればこんなところでしょうか。
(細かい点をきっちりコードにするとしんどいので省略…)

スキルアップ/キャリアアップ(JOB@IT)