質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

repaint()の即時実行をしたい(swingにて)

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 643

score 11

前提・実現したいこと

Java初心者です。まだ2回目の質問のため、質問の仕方、調べ方なども含めアドバイスをいただけると幸いです。 

今回、Javaアプレットでコマンド入力した長方形データを即時アプレット表示するプログラムを作っています。
しかし、repaint()が操作の終了後にしか実行されませんでした。 

前回質問させていただいたとき、swingのevent-dispatch-loop方式でのプログラミングで作成することをおすすめしていただいたのですが、
swingを使用するのは初めてなので、具体的にどのように制御すればよいのか、どのように調べればよいのかアドバイスいただけたら幸いです。

該当のソースコード

GUI作成のためのクラス

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

public class RectangleEditor extends Applet {      
    Command command = new Command();
   //コマンド入力操作を行うクラスへ受け渡し
    public void init(){
        command.choseCommand();     
    }

  //他クラスから呼び出しされるメソッド
    public void run(){   
        System.out.println("Applet表示");
        repaint();
    }

    //長方形のデータを受け取り、描画する
    public void paint(Graphics g) {
        Board board = new Board();  //長方形データを格納しているクラス
        int[] x = board.xList();
        int[] y = board.yList();
        int[] w = board.wList();
        int[] h = board.hList();

     g.fillRect(x[rectNumber],y[rectNumber],w[rectNumber],h[rectNumber]);
        }
    }  
}

キーボードから標準入力し、Boardクラスへ指示するクラス

public class Command{ 
    ColorRectangle[] rect = new ColorRectangle[1];
    Board board = new Board();

    //長方形の作成(create)
    public void create(){
    Board board = new Board();
    int dataNumber = 4;
    int[] data = new int[dataNumber];

    //幅、高さ、左上隅座標の入力を要求する
    System.out.println("幅(data[0])、高さ(data[1])、左上隅座標(x座標(data[2])、y座標(data[3]))を順に入力してください");               
    Input input = new Input();
    for(int i = 0; i < dataNumber; i++){
        data[i] = input.inputInteger("data[" + i + "]:");
    }

    //Rectangleクラスにデータの読み込み
    this.rect[0] = new Rectangle(data[0],data[1],data[2],data[3]); 

     if(error.equals("false")){
        //Boardに長方形を入力
        board.add(this.rect);
    }else{
        this.choseCommand();
    }  
    }

    //長方形を削除する(delate())
    public void delate(){
      //削除する長方形を選択し、Boardクラスのdelate()へ処理を渡す
       System.out.println();
       board.showRect();
      int listNumber = input.inputInteger("上記のリストの中で削除したい長方形の番号を半角数字で答えてください");
       board.delate(listNumber);
    }
    }

ボード上の長方形を格納するクラス

import java.util.LinkedList;
import java.util.List;

public class Board{
    static RectangleEditor re = new RectangleEditor();
    static Command command = new Command();
    Rectangle[] rect = new Rectangle[1]; //入力された長方形を一時格納する配列
   static private int newListNumber = 0; //格納されている長方形の個数

    static List<Integer> w = new LinkedList<Integer>();    
    static List<Integer> h = new LinkedList<Integer>();    
    static List<Integer> x = new LinkedList<Integer>();    
    static List<Integer> y = new LinkedList<Integer>();

    //リストに長方形を追加する
    static public void add(ColorRectangle[] rect){
    w.add(rect[0].width());    
    h.add(rect[0].height());    
    x.add(rect[0].x());    
    y.add(rect[0].y());

    newListNumber++;
    re.run();
    command.choseCommand();
    }

    //リストの長方形を削除する
    static public void delate(int numberRect){
    //格納番号以外の数値を入力した場合のエラー処理

        //該当の長方形の各データの削除
        x.remove(numberRect);
        y.remove(numberRect);
        w.remove(numberRect);
        h.remove(numberRect);

        newListNumber--;
        re.run();
        command.choseCommand();
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る