2014-11-16 4 views
0
public class main extends JFrame { 
    JPanel panel = new JPanel(); 
    JButton playGame = new JButton("PLAY GAME"); 
    public void paint(java.awt.Graphics g) { 
     super.paint(g); 
     BufferedImage image = null; 
     try { 
      image = ImageIO.read(new File("./src/Images/menu.jpg")); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     g.drawImage(image, 0, 0, 1000, 600, this); 
    } 

    public main(){ 
     super(); 

     playGame.setBounds(390, 250, 220, 30); 
     //panel.setBounds(80, 800, 200, 100); 
     panel.setLayout(null); 
     panel.add(playGame); 
     add(panel); 

     setTitle("MENU"); 
     setSize(1000,600); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(false); 
     //setLayout(new FlowLayout()); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new main(); 
} 
} 

Я пытаюсь добавить свой JButton по изображению, но он идет позади изображения.JButton за фоновым изображением

Проблема в том, что я не знаю, как добавить фоновое изображение, чтобы кнопки отображались в верхней части изображения. Есть ли у меня для меня настройка фонового изображения, чтобы другие панели отображались сверху?

+0

'panel.setLayout (null); 'Java GUIs должны работать на разных ОС, размер экрана, разрешение экрана и т. д. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

ответ

0

Попробуйте добавить фоновое изображение на свою панель и не загружайте изображение из папки src, потому что после компиляции ваших классов будут созданы в папке bin, поэтому используйте class.getResource(), который дает вам относительный URL-адрес для вашего образ; другая вещь, которую вы никогда не должны переопределить метод рисования JFrame, потому что картина на JFrame применяется также через границы кадра, поэтому старайтесь всегда рисовать на панели внутри вашего кадра путем переопределения метода paintComponent класса JPanel:

import java.awt.image.BufferedImage; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class main extends JFrame 
{ 
    JButton playGame = new JButton("PLAY GAME"); 
    JPanel panel = new JPanel() 
    { 
     public void paintComponent(java.awt.Graphics g) 
     { 
      super.paintComponent(g); 
      BufferedImage image = null; 
      try 
      { 
       image = ImageIO.read(main.class.getResource("/Images/menu.jpg")); 
      } 
      catch (IOException e) 
      { 

       e.printStackTrace(); 
      } 
      g.drawImage(image, 0, 0, 1000, 600, this); 
     } 
    }; 

    public main() 
    { 
     super(); 

     playGame.setBounds(390, 250, 220, 30); 
     // panel.setBounds(80, 800, 200, 100); 
     panel.setLayout(null); 
     panel.add(playGame); 
     add(panel); 

     setTitle("MENU"); 
     setSize(1000, 600); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(false); 
     // setLayout(new FlowLayout()); 
     setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new main(); 
    } 
} 
Смежные вопросы