Reputation: 1
Hello i have been following multiple guides on how to add a background image to a JFrame. However when run my program, the background turns out with only a bit of the background image showing in the bottom left and bottom sides.
Here is my current code:
private int width = 1280;
private int height = 720;
private String title = "Creation - " + Component.versionID + " Launcher";
private JPanel window = new JPanel();
private JFrame frame = new JFrame();
private JLabel name, version;
private JButton play, options, changelog, quit;
private Rectangle rPlay, rOptions, rChangelog, rQuit, rName, rVersion;
private int buttonWidth = 200;
private int buttonHeight = 80;
public Menu (Component component) {
frame.setTitle(title);
frame.setSize(new Dimension(width, height));
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.add(component);
frame.getContentPane().add(window);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setIconImage(new ImageIcon("res/icon.png").getImage());
setLayout(new BorderLayout());
JLabel background = new JLabel(new ImageIcon("res/background.png"));
frame.add(background);
background.setLayout(new FlowLayout());
window.setLayout(null);
drawButtons();
frame.repaint();
frame.pack();
}
private void drawButtons() {
name = new JLabel("Creation");
rName = new Rectangle((width/2) - (buttonWidth/2) + 60, 20, buttonWidth, buttonHeight);
name.setBounds(rName);
window.add(name);
play = new JButton("Play");
rPlay = new Rectangle((width/2) - (buttonWidth/2), 250, buttonWidth, buttonHeight);
play.setBounds(rPlay);
window.add(play);
options = new JButton("Options");
rOptions = new Rectangle((width/2) - (buttonWidth/2), 350, buttonWidth, buttonHeight);
options.setBounds(rOptions);
window.add(options);
changelog = new JButton("View change-log");
rChangelog = new Rectangle((width/2) - (buttonWidth/2), 450, buttonWidth, buttonHeight);
changelog.setBounds(rChangelog);
window.add(changelog);
quit = new JButton("Quit");
rQuit = new Rectangle((width/2) - (buttonWidth/2), 550, buttonWidth, buttonHeight);
quit.setBounds(rQuit);
window.add(quit);
play.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Component component = new Component();
frame.dispose();
component.start();
}
});
options.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
changelog.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
(As you can see) my JFrame size is 1280x720. This is the same size as the background image, so I don't see any issues. If anyone could help me edit my code or give me pointers, I am simply looking for the background image to display behind the buttons.
Upvotes: 0
Views: 14435
Reputation: 31
class MyFrame {
public static void main(String arr[])
{
JPanel panel=new JPanel()
{
@Override
protected void paintComponent(Graphics g)
{
try
{
BufferedImage image = ImageIO.read(new File("C://Users//MulayamYadav//Desktop//1.jpg"));
Image image1=image.getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH);
g.drawImage(image1, 0, 0, null);
}catch(Exception ex)
{
System.out.println(ex);
}
}
};
JFrame frame=new JFrame();
panel.setLayout(new FlowLayout());
panel.add(new JButton("Button1"));
panel.add(new JButton("Button2"));
add(panel);
frame.setVisible(true);
}
Upvotes: 0
Reputation: 1
String filename = "demo//6.jpg";
BufferedImage image = ImageIO.read(new File(filename));
//Create Image Label
JLabel label = new JLabel(new ImageIcon(image));
label.setBounds(0, 0, image.getWidth(), image.getHeight());
lpane.setLayout(null);
lpane.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
lpane.add(label, new Integer(JLayeredPane.DEFAULT_LAYER-1));
ImageIcon ic=new ImageIcon("demo//12.jpg");
but.setIcon(ic);
Upvotes: 0
Reputation: 285405
setBounds(...)
but instead use decent layout managers. While null layout seems easier to newbies, that's usually just because you may be unfamiliar with how to use layout managers, and trust me, it is much easier to create and maintain GUI's that use well-behaved layout managers.Upvotes: 3