2012-02-27 3 views
0

Всякий раз, когда я добавляю фон (изображение img) в свой JFrame, я не могу видеть свою панель меню .... Любая помощь будет принята с благодарностью ... Я просто изучаю JFrames и, наверное, с видом на что-то глупое.JFrame Фоновая подсветка панели меню

class GameFrame extends JFrame { 

private JLabel statusbar; 
Image img = new ImageIcon("splash.png").getImage(); 

public GameFrame() { 
    initUI(); 
    menuUI(); 
    BackgroundLoader bg = new BackgroundLoader(); 
} 

@Override 
    public void paint(Graphics g) { 
    try { 
     Image img = ImageIO.read(new File("splash.png"));    
     g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

public final void initUI() { 
    setTitle("Super RPG Hero: The Quest for Fame and Fortune"); 
    setSize(800, 480); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

    //JLabel background = new JLabel(splash); 
    //background.setBounds(0, 0, splash.getIconWidth(), splash.getIconHeight()); 
    //getLayeredPane().add(background, new Integer(Integer.MIN_VALUE)); 

} 

public final void menuUI() { 


    JMenuBar menubar = new JMenuBar(); 

    //Creates file menu item 
    JMenu file = new JMenu("File"); 
    file.setMnemonic(KeyEvent.VK_F); 

    //Creates Object for New Game toolbar 
    JMenuItem newItem = new JMenuItem("New Game"); 
    newItem.setMnemonic(KeyEvent.VK_C); 
    newItem.setToolTipText("New Game"); 
    newItem.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent event) { 
      String playerName = "Peter"; 
      CharacterCreator characterOne = new CharacterCreator(playerName); 
      characterOne.statBuilder(); 
     } 
    }); 

    //Creates Object for Save Game toolbar 
    JMenuItem saveItem = new JMenuItem("Save"); 
    saveItem.setMnemonic(KeyEvent.VK_C); 
    saveItem.setToolTipText("Save Game"); 

    //Creates Object for Load Game toolbar 
    JMenuItem loadItem = new JMenuItem("Load"); 
    loadItem.setMnemonic(KeyEvent.VK_C); 
    loadItem.setToolTipText("Load Game"); 

    //Creates Object for Exit Game toolbar 
    //And creates method for the game to exit 
    JMenuItem exitItem = new JMenuItem("Exit"); 
    exitItem.setMnemonic(KeyEvent.VK_C); 
    exitItem.setToolTipText("Exit Game"); 
    exitItem.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent event) { 
      System.exit(0); 
     } 
    }); 

    //Adds created objects to GUI 
    file.add(newItem); 
    file.add(saveItem); 
    file.add(loadItem); 
    file.add(exitItem); 
    menubar.add(file); 

    setJMenuBar(menubar); 

} 

}

+0

1) Что такое «BackgroundLoader»? 2) Не загружайте изображения в 'paint()' или 'paintComponent()' 3) Не расширяйте фрейм. 4) При рисовании изображения, которое загружается асинхронно, используйте «ImageObserver» (или используйте «ImageIO» для его загрузки). 5) Установите предпочтительный размер настраиваемого компонента, а не размер самого кадра. Затем вызовите 'pack()'. 6) За более эффективную помощь отправьте сообщение по адресу [SSCCE] (http://sscce.org/). –

ответ

4

Вы должны осуществлять paintComponent() и не paint().

Переопределяя краску и не делегируя ее, вы не позволяете JFrame рисовать то, что нужно для рисования.

Кроме того, посмотрите на это answer.

+1

Более конкретно - он должен переопределить 'paintComponent (...)' для JPanel или другого компонента, который происходит от JComponent (включая сам JComponent), а затем либо добавить его в контентную панель JFrame, либо сделать его contentPane. –