2013-05-02 2 views
0

Здравствуйте, я читал несколько руководств о том, как добавить фоновое изображение в JFrame. Однако, когда вы запускаете мою программу, фон получается только с небольшим количеством фонового изображения, отображаемого в нижней и нижней частях.Добавление фонового изображения в JFrame с использованием Swing

Вот мой текущий код:

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. Это тот же размер, как фоновое изображение" * ... нет, он выиграл» t be. Рамка имеет декорации, это означает, что пространство, доступное для приложения, будет «рамкой» в рамке. Вместо того, чтобы напрямую устанавливать размер кадра, используйте настраиваемый компонент, который возвращает 'preferredSize' области содержимого и использует это как область содержимого фреймов ... – MadProgrammer

ответ

3
  1. Если ваш GUI будет размером изображения, затем добавьте BufferedImage в JLabel, и добавьте JLabel к ContentPane фрейма, а не некоторые JPanel, которые не отображают изображение.
  2. Не используйте нулевой макет и setBounds(...), но вместо этого используйте достойных менеджеров макета. Хотя нулевой макет кажется проще новичкам, это обычно происходит из-за того, что вы не знакомы с тем, как использовать менеджеры макетов, и доверяйте мне, но много проще создавать и поддерживать графический интерфейс, в котором используются хорошо управляемые менеджеры макетов.
  3. Дайте JPanel/contentPane достойную схему, так как вы будете добавлять к ней компоненты.
+0

Здравствуйте, я очень новичок в кодировании на Java, не могли бы вы предоставить мне какой-нибудь примерный код того, как это будет выглядеть? Спасибо за ваш быстрый ответ. – user2341499

+4

Мы не можем здесь написать код. Попробуйте написать код самостоятельно. Если есть что-то, чего вы не понимаете, задайте следующий вопрос о той части, которую вы не понимаете. Вы можете начать с чтения учебника Swing, в котором есть основы использования Swing. – camickr

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

}

Смежные вопросы