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

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

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

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

Javaアプレット

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

Q&A

0回答

913閲覧

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

Mats_k

総合スコア11

Swing

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

Javaアプレット

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

0グッド

0クリップ

投稿2019/05/06 03:54

編集2022/01/12 10:55

前提・実現したいこと

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

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

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

該当のソースコード

GUI作成のためのクラス

java

1import java.applet.Applet; 2import java.awt.*; 3 4public class RectangleEditor extends Applet { 5 Command command = new Command(); 6 //コマンド入力操作を行うクラスへ受け渡し 7 public void init(){ 8 command.choseCommand(); 9 } 10 11  //他クラスから呼び出しされるメソッド 12 public void run(){ 13 System.out.println("Applet表示"); 14 repaint(); 15 } 16 17 //長方形のデータを受け取り、描画する 18 public void paint(Graphics g) { 19 Board board = new Board();  //長方形データを格納しているクラス 20 int[] x = board.xList(); 21 int[] y = board.yList(); 22 int[] w = board.wList(); 23 int[] h = board.hList(); 24 25     g.fillRect(x[rectNumber],y[rectNumber],w[rectNumber],h[rectNumber]); 26 } 27 } 28}

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

java

1public class Command{ 2 ColorRectangle[] rect = new ColorRectangle[1]; 3 Board board = new Board(); 4 5 //長方形の作成(create) 6 public void create(){ 7 Board board = new Board(); 8 int dataNumber = 4; 9 int[] data = new int[dataNumber]; 10 11 //幅、高さ、左上隅座標の入力を要求する 12 System.out.println("幅(data[0])、高さ(data[1])、左上隅座標(x座標(data[2])、y座標(data[3]))を順に入力してください"); 13 Input input = new Input(); 14 for(int i = 0; i < dataNumber; i++){ 15 data[i] = input.inputInteger("data[" + i + "]:"); 16 } 17 18 //Rectangleクラスにデータの読み込み 19 this.rect[0] = new Rectangle(data[0],data[1],data[2],data[3]); 20 21     if(error.equals("false")){ 22 //Boardに長方形を入力 23 board.add(this.rect); 24 }else{ 25 this.choseCommand(); 26 } 27 } 28 29 //長方形を削除する(delate()) 30 public void delate(){ 31    //削除する長方形を選択し、Boardクラスのdelate()へ処理を渡す 32    System.out.println(); 33    board.showRect(); 34 int listNumber = input.inputInteger("上記のリストの中で削除したい長方形の番号を半角数字で答えてください"); 35     board.delate(listNumber); 36 } 37 } 38

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

java

1import java.util.LinkedList; 2import java.util.List; 3 4public class Board{ 5 static RectangleEditor re = new RectangleEditor(); 6 static Command command = new Command(); 7 Rectangle[] rect = new Rectangle[1]; //入力された長方形を一時格納する配列 8   static private int newListNumber = 0; //格納されている長方形の個数 9 10 static List<Integer> w = new LinkedList<Integer>(); 11 static List<Integer> h = new LinkedList<Integer>(); 12 static List<Integer> x = new LinkedList<Integer>(); 13 static List<Integer> y = new LinkedList<Integer>(); 14 15 //リストに長方形を追加する 16 static public void add(ColorRectangle[] rect){ 17 w.add(rect[0].width()); 18 h.add(rect[0].height()); 19 x.add(rect[0].x()); 20 y.add(rect[0].y()); 21 22 newListNumber++; 23 re.run(); 24 command.choseCommand(); 25 } 26 27 //リストの長方形を削除する 28 static public void delate(int numberRect){ 29 //格納番号以外の数値を入力した場合のエラー処理 30 31 //該当の長方形の各データの削除 32 x.remove(numberRect); 33 y.remove(numberRect); 34 w.remove(numberRect); 35 h.remove(numberRect); 36 37 newListNumber--; 38 re.run(); 39 command.choseCommand(); 40 } 41}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問