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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

930閲覧

javaプログラムにてpaint(Graphics)が呼ばれない件

pinokionokio

総合スコア28

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2020/09/27 09:04

タイトルの通り、描画メソッドのprint(Graphics)が呼ばれない理由がわかりません。

下記プログラムを実行するとウィンドウ内が緑色(バックグラウンドカラー)に塗られ、コンソールに「bbbb」とだけ出力されます。

ウィンドウ内がバックグラウンドで塗られていることから描画対象のJPanelは正しく置かれています。
描画系メソッドは@Overrideをつけているので、オーバーライドする名前を間違えているわけでもなさそうです。(名前が違えばエラーが出ますよね?)
再描画テスト用にクリックでrepaint()も呼んでみましたが、「aaaa」「bbbb」までしか出力されません。

「cccc」以降が呼ばれていないので、repaintメソッドで止まっているようですが、原因は何が考えられるでしょう。

環境としてはmac、eclipseです。

java

1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.event.MouseEvent; 4import java.awt.event.MouseListener; 5import javax.swing.JFrame; 6import javax.swing.JPanel; 7 8public class SeedFillTest extends JPanel{ 9 10 public static void main(String[] args) { 11 new SeedFillTest(); 12 } 13 14 public SeedFillTest() { 15 JFrame frame = new JFrame(); 16 frame.setSize(600,500); 17 frame.add(this); 18 frame.setVisible(true); 19 20 setBackground(Color.green); 21 addMouseListener( 22 new MouseListener() { 23 @Override 24 public void mouseClicked(MouseEvent e) { 25 System.out.println("aaaa"); 26 repaint(); 27 } 28 29 @Override public void mousePressed(MouseEvent e) {} 30 @Override public void mouseReleased(MouseEvent e) {} 31 @Override public void mouseEntered(MouseEvent e) {} 32 @Override public void mouseExited(MouseEvent e) {} 33 } 34 ); 35 } 36 37 @Override 38 public void repaint() { 39 System.out.println("bbbb"); 40 super.repaint(); 41 } 42 43 @Override 44 public void update(Graphics g) { 45 System.out.println("cccc"); 46 super.update(g); 47 } 48 49 @Override 50 public void print(Graphics g) { 51 System.out.println("dddd"); 52 super.paint(g); 53 } 54 55 @Override 56 public void printComponent(Graphics g) { 57 System.out.println("eeee"); 58 super.paintComponent(g); 59 } 60} 61
TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

間違い探しみたいになっていますが^^;

paintComponent
× printComponent

paint
× print

投稿2020/09/27 09:55

TN8001

総合スコア9326

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

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

pinokionokio

2020/09/27 10:05

一時間以上悩んだ結果がこれは恥ずかしい^^; まさか2つとも似たような名前のメソッドがあったとは思いませんでした。 @Override付けてたのでメソッド名は完全に過信していました。 それとupdate(Graphics)はrepaint()したら必ず呼ばれるわけではなかったんですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問