Displaying an image in a JFrame
51,399
Solution 1
do this after creating Jlabel
imageLabel.setBounds(10, 10, 400, 400);
imageLabel.setVisible(true);
also set the layout to JFrame
Game.f.setLayout(new FlowLayout);
Solution 2
- You don't need to use another
JFrame
instance inside theGame
JFrame
: - Calling
setVisible(flag)
from the constructor is not preferable. Rather initialize yourJFrame
from outside and put yoursetVisible(true)
inside event dispatch thread to maintain Swing's GUI rendering rules usingSwingUtilities.invokeLater(Runnable)
- Do not give size hint by
setSize(Dimension)
of theJFrame
. Rather use proper layout with your component, callpack()
after adding all of your relevant component to theJFrame
. - Try using
JScrollPane
withJLabel
for a better user experience with image larger than the label's size can be.
All of the above description is made in the following example:
class Game1 extends JFrame
{
public Game1()
{
// setSize(1000, 750); <---- do not do it
// setResizable(false); <----- do not do it either, unless any good reason
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Online First Person Shooter");
ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png");
JLabel label = new JLabel(image);
JScrollPane scrollPane = new JScrollPane(label);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
add(scrollPane, BorderLayout.CENTER);
pack();
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Game1().setVisible(true);
}
});
}
}
Author by
user2988879
Updated on November 21, 2020Comments
-
user2988879 over 3 years
I am currently learning Java, and I am stuck with something at the moment.
I was looking for a way to add an image to my JFrame. I found this on the internet:
ImageIcon image = new ImageIcon("path & name & extension"); JLabel imageLabel = new JLabel(image);
And after implementing it to my own code, it looks like this (this is only the relevant part):
class Game1 extends JFrame { public static Display f = new Display(); public Game1() { Game1.f.setSize(1000, 750); Game1.f.setResizable(false); Game1.f.setVisible(true); Game1.f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Game1.f.setTitle("Online First Person Shooter"); ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png"); JLabel imageLabel = new JLabel(image); add(imageLabel); } } class Display extends JFrame { }
When running this code, it doesn't give me any errors, but it also doesn't show the picture. I saw some questions and people having the same problem, but their code was completely different from mine, they used other ways to display the image.