この問題について多くの回答を読んだが、単純なコードでもエラーを見つけることができない。問題は次のとおりです。JPanelにあるJLabelにImageを描画したいのですが、JLabelのpaintComponent()メソッドは呼び出されません。描画イメージのJava repaint()はpaintComponent()を呼び出さない
ImagePainterクラスはイメージここ
public class ImagePainter extends JLabel{
private Image image;
public ImagePainter(){
try {
image = ImageIO.read(new File("src/testgui/image.png"));
} catch (IOException exception) {
exception.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
System.out.println("in paintComponent");
}
}
が標準JFrameのあるを描画する:ここ
コードです。私はcontentPaneにJPanelを追加するように気をつけた。
public class Display extends JFrame{
public Display(){
JPanel jp = new JPanel();
ImagePainter i = new ImagePainter();
getContentPane().add(jp);
jp.add(i);
jp.repaint();
setSize(800, 800);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最後にメイン。
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
Display d = new Display();
}
});
}
}
最後に、私は私が直接contentPaneにImagePainterを追加した場合、画像が正しく描画されていることが観察:誰もがやって言うように私はEDTの表示をインスタンス化します。おそらく愚かなエラーですが、文字通り数時間かけて見つけようとしていて、本当に見えません。前もって感謝します !
1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 ( 'main'メソッドを' Display'クラスに入れて2つのクラスだけにしてから 'ImagePainter'を' public'から降格させ、デフォルトのアクセスにして最後に貼り付けます)2) )は[このQ&A](http://stackoverflow.com/q/19209650/418556)に表示されている画像にホットリンクすることです。 –