How can I display a BufferedImage in a JFrame?
Solution 1
You will have to repaint the JFrame
whenever you update the image.
Here is what a simple google on the topic brings up: (I use those tutorials for all my Java coding)
Java Tutorial: Drawing an Image
Solution 2
To build on camickr's solution (for the lazy like me who want quick code to copy/paste) here's a code illustration:
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.getContentPane().add(new JLabel(new ImageIcon(img2)));
frame.getContentPane().add(new JLabel(new ImageIcon(img3)));
frame.pack();
frame.setVisible(true);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // if you want the X button to close the app
Solution 3
Just incase life's to short too read the official docs here's a dirty way to get it done multiple times over
private static JFrame frame;
private static JLabel label;
public static void display(BufferedImage image){
if(frame==null){
frame=new JFrame();
frame.setTitle("stained_image");
frame.setSize(image.getWidth(), image.getHeight());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
label=new JLabel();
label.setIcon(new ImageIcon(image));
frame.getContentPane().add(label,BorderLayout.CENTER);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}else label.setIcon(new ImageIcon(image));
}
Solution 4
I'm not really sure what you question is but if you have a BufferedImage then you simply create an ImageIcon using the image, then you add the icon to a JLabel and add the label to the GUI like any other component.
If you question is about how to create a gray scale, the I suggest you search the web using those terms as the search keywords, I'm sure you will find examples out there.
anon
Updated on July 09, 2022Comments
-
anon almost 2 years
I want to display variations of the same image in the same JFrame, for example display an image in JFrame, then replace it with gray scale of the same image.
-
Admin over 7 yearsThis just makes the smallest window possible.
-
Ian Will over 7 yearsIt's been a long time since I used swing, but i'd guess you didn't call
pack()
if you have a tiny window -
philx_x about 7 yearsexactly what i was looking for, quickly check whether bufferedImages are read correctly .. no need for all this JComponent extending and print overriding. Thanks!
-
Pranav A. over 6 years@IanWill you will also need to call
frame.setPreferredSize(new java.awt.Dimension(int width, int height));
before callingframe.pack();
importing java.awt.Dimension also works too :) Also this should be the selected answer. +1 for code example.