2013-05-02 48 views
0

您好,我一直在关注如何将背景图像添加到JFrame的多个指南。但是,当运行我的程序时,只显示底部左侧和底部的背景图像。使用Swing将背景图像添加到JFrame

这里是我当前的代码:

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); 
     } 
    }); 
} 

(正如你所看到的)我的JFrame的尺寸为1280x720。这与背景图片大小相同,所以我没有看到任何问题。如果任何人都可以帮我编辑我的代码或给我指针,我只是寻找背景图像显示在按钮后面。

+2

* “JFrame的尺寸为1280x720,这是大小背景图像相同的” * ......不,它赢得了”不要。一个框架有装饰,这意味着应用程序可用的空间将是'frame.size - frame border insets'。而不是直接设置框架的大小,使用一个自定义组件,返回内容区的'preferredSize',并将其用作框架内容窗格...... – MadProgrammer 2013-05-02 03:23:01

回答

3
  1. 如果你的GUI将图像的大小,然后将BufferedImage中增加了一个JLabel,并添加的JLabel的到JFrame的contentPane的,而不是一些JPanel中不显示图像。
  2. 请勿使用空白布局和setBounds(...),而应使用合适的布局管理器。虽然空布局似乎更容易为新手,这通常只是因为你可能不熟悉如何使用布局管理器,并相信我,它是更容易创建和维护使用良好行为的布局管理器的GUI。
  3. 给JPanel/contentPane一个体面的布局,因为您将添加组件。
+0

您好,我对Java编程非常新颖,能否请您提供我这是什么样的代码示例?感谢您的快速回复。 – user2341499 2013-05-02 04:52:50

+4

我们不是在这里为你写代码。尝试自己编写代码。如果有什么你不明白的地方,那就问一个关于你不了解的部分的后续问题。您可以从阅读Swing教程开始,该教程具有使用Swing的基础知识。 – camickr 2013-05-02 04:58:40

0
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); 
0

类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); 

}