So I’m making this program with a GUI and I haven’t worked with Swing/SWT too much but a little bit to know what’s going on.
Anyway, I add an actionlistener for a button so it’ll add an image to the contentPane when I click on the button but it doesn’t work unless I have it as a JComponent (as seen below) and add my other things (button, JLabel, etc) to it afterwards…AND set this JComponent to the content view (which doesn’t make sense)…. I’ve also tried making it extend JPanel and just clearing out original contents and re-adding them to the new JPanel. The thing is, when I do this it recreates the text for my JLabel in a weird way, and I just know there’s gotta be a simpler, more efficient, way.
class ShowImage extends JComponent{
public ShowImage(){
super();
monkey = Toolkit.getDefaultToolkit().getImage(("D:/monkey.png"));
}
public void paintComponent(Graphics g){
g.drawImage(monkey, 20, 100, null);
repaint();
}
}
repaintinsidepaintComponentsuper.paintComponentand then draw the imageAlso, depending on the layout manager, this component will have a preferred size of
(0, 0), and therefore will not be visible.For more information, see 2D Graphics.
Edit –
Note that dynamically adding a component will force you to revalidate the container and issue a repaint request so the layout manager will layout its components again and remove any visual artifacts. Also, for more information regarding images, see Working with Images.
Anyway, the simplest approach would probably be to set the image as the icon of a
JLabelinstance and add that to the container. There’s really no need to reinvent the wheel here.