電子書籍の厳選無料作品が豊富!

repaint()が実行されません。

もともとあるJEditorPane上に画像表示させるために、他のクラスからrepaint()をよびだしてpaint()を実行させようとしているのですが、実行されません……。
以下にプログラムを表示します。

import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;


public class Open extends JFrame {
  public Open(){
  }

   public void paint(Graphics g){
   System.out.println("paint開始");
   Graphics2D g2 = (Graphics2D)g;

   BufferedImage readImage = null;

   try {
   readImage = ImageIO.read(new File("sample.png"));
   } catch (Exception e) {
   e.printStackTrace();
   readImage = null;
   }
 
   if (readImage != null){
   g2.drawImage(readImage, 0, 0, this);
   }
   }

   public void Fileload(){
   System.out.println("再描写");
   repaint();
  }
}

外部のクラスからFileload()を呼び出して実行すると"再描写"はコマンドプロンプト上に表示されるのですが"paint開始"は表示されません。なのでpaint()の呼び出しができていないのだと思うのですが……。
原因がわかりません……。


javaも質問も初心者なのでわかりづらいところがあるとは思いますが、どうぞよろしくお願いします。

A 回答 (1件)

カンですが、


フレームの描画領域部分が画面上に見えないときなどに
repain()を呼んでも、
再描画処理が「省略」されるのでは?
(見えないなら再描画しても意味ないので)

このへんはOSが勝手にやってるのか
swingフレームワークが勝手にやってるのか
わからないけれど。
    • good
    • 0
この回答へのお礼

一応このプログラムを呼び出すクラスではフレームもパネルも作成して、”Show”ボタンを押すとFileload()を呼び出すように作ったのですが……。


フレームの描画領域部分についてはまったく考えていなかったので、考えてみます!
ありがとうございました。

お礼日時:2010/09/04 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!