質問: new JPanel(); p.add(lab); getContentPane().add(p, BorderLyout.CENTER); } ``` このようなプログラムです。 エラーは発生しておらず、JFreamのみが表示されます。 byte列とImageIconを出力するとbyte列は[B@76fb509aで、 ImageIconはjavax.swing.ImageIcon@3f91beefと出力されます。 どうすればJFreamに表示できるでしょうか。
回答: JFreamはJFrameのタイプミスですか? 独自のクラスでないことを前提に回答します。 コンストラクタ内の1行目でsetVisible(true)をしてしまっており、 続いてsetSizeもしています。 この2つは再描画命令を含んでいるので、JFrameが描画されます。 この段階ではJFrameには何も乗っていないので中身は真っ白です。 そのあとでJPanelやなんかを乗せてコンストラクタを終了しているので、 **次の描画命令がありません**。 このため、ImageIconが描画されないのです。 ウィンドウを最小化してもう一度表示させると、内部で呼ばれた再描画指令によってImageIconが表示されるはずです。 対策は、**setVisible(true);をコンストラクタの最後の行に移動**する。 もしくは、コンストラクタの最後の行にvalidate();とrepaint();を追加する。 validate();はGUI系の再配置命令 repaint();は再描画命令です。