Im a bit confused as to your code you talk of adding an image to a JLabel but the code shows you adding a variable mButton and setting its icon, which makes me think its JButton? 
Either way is the JLabel/JButton already added to the container or is it being added dynamically too?
1) If JLabel/JButton is not already present on visible container:
After adding/removing or changing size/Layout of components on a visible container, you should call revalidate() and repaint() on containers instance as to reflect the changes:
//code which adds component to visible panel_1
//so changes can be reflected
panel_1.revalidate();
panel_1.repaint();
2) If JLabel/JButton is visible setIcon should work as it calls revalidate() and repaint() itself as seen here from JLabel#setIcon (JButton is the same):
     * 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
thus something else is at fault like your LayoutManager not correctly supporting the addition of the new component and thus it doesnt get placed in a visible space, please post an SSCCE.
Also I see you are using setSize(..) and setLocation(..) so I get the feeling you are using the Absolute/null LayoutManager this is not recommend and can cause many problems. Rather use an appropriate LayoutManager see here for more: