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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

受付中

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

Mats_k
Mats_k

総合スコア0

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0回答

0評価

0クリップ

664閲覧

投稿2019/05/06 03:54

編集2022/01/12 10:55

前提・実現したいこと

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

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

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

該当のソースコード

GUI作成のためのクラス

java

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クラスへ指示するクラス

java

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); } }

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

java

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ページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

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

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

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

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

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

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

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。