あなたが画像を追加することについて話しているあなたのコードに関して少し混乱していますJLabel
が、コードは変数を追加してmButton
そのアイコンを設定することを示しています、それは私にそれを思わせJButton
ますか?
どちらの方法でも、JLabel
/はJButton
すでにコンテナに追加されていますか、それとも動的に追加されていますか?
1)JLabel
/JButton
が表示されているコンテナにまだ存在しない場合:
表示されているコンテナのコンポーネントのサイズ/レイアウトを追加/削除または変更した後、変更を反映するようにコンテナインスタンスを呼び出す必要がrevalidate()
あります。repaint()
//code which adds component to visible panel_1
//so changes can be reflected
panel_1.revalidate();
panel_1.repaint();
2)JLabel
/JButton
が表示されている場合は、 (同じ)から見たsetIcon
ように、呼び出しrevalidate()
とrepaint()
それ自体が機能するはずです。JLabel#setIcon
JButton
* 108: getfield #294 // Field defaultIcon:Ljavax/swing/Icon;
* 111: invokeinterface #346, 1 // InterfaceMethod javax/swing/Icon.getIconHeight:()I
* 116: aload_2
* 117: invokeinterface #346, 1 // InterfaceMethod javax/swing/Icon.getIconHeight:()I
* 122: if_icmpeq 129
* 125: aload_0
* 126: invokevirtual #319 // Method revalidate:()V
* 129: aload_0
* 130: invokevirtual #318 // Method repaint:()V
したがって、LayoutManagerが新しいコンポーネントの追加を正しくサポートしておらず、表示されているスペースに配置されていないなど、他の問題が発生しています。SSCCEを投稿してください。
また、使用しているようですので、使用setSize(..)
してsetLocation(..)
いるように感じますAbsolute
/null
LayoutManager
これはお勧めできません。多くの問題を引き起こす可能性があります。むしろ、適切なものを使用してください。詳細については、LayoutManager
こちらを参照してください。