2015-07-13 4 views
0

Итак, ребята, я хочу использовать код, который я должен установить фон jFrame, не добавляя ничего из другого класса (например, используя этот код в jPanel, а затем добавляя эту панель в jFrame). Я хочу сделать все в этом классе. Я действительно не знаю, что делать, поэтому я попробовал это, но этот код не отображает изображение!jFrame не показывает изображение

import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class panel extends JFrame{ 
    Image img; 

    public void paintComponent(Graphics g){ 
     super.paintComponents(g); 

     g.drawImage(img, 0, 0, getWidth(), getHeight(), null); 
     g.dispose(); 
    } 

    public panel(){ 
     img=new ImageIcon(getClass().getResource("bg_login.jpg")).getImage(); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     pack(); 
     setVisible(true); 
    } 


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

Добавьте '@ Override' в метод' paintComponent', чтобы увидеть сюрприз ... – Reimeus

+0

nope the magic did not work: P, когда я добавляю @Override, он показывает красную строку под paintComponent .. –

+0

нет метода 'paintComponent' для jframe –

ответ

0

нет paintcomponent() метода jframe, как это не JComponent, но контейнер .Вы может сделать панель и overide paintcomponent метода затем setcontentpane из jframe к этой панели

примеру

public class panel extends JPanel { 

    Image img; 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (img != null) { 
      g.drawImage(img, 0, 0, getWidth(), getHeight(), null); 
     } 
     // g.dispose(); 
    } 

    public panel() { 
     img=new ImageIcon(getClass().getResource("bg_login.jpg")).getImage(); 

    } 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     panel panel = new panel(); 
     jFrame.setContentPane(panel); 
     jFrame.pack(); 
     jFrame.setVisible(true); 
    } 
} 
+1

Ответ отредактирован: никогда не удаляйте объект Graphics, который был передан в метод paint или paintComponent, так как это разрушает цепочку рисования и подвергает риску побочные эффекты или NPE. Также 'super.paintComponents' был изменен на' super.paintComponent' и добавлена ​​нулевая проверка. –

+0

@HovercraftFullOfEels ohh Спасибо за ваше редактирование –

+0

thnx dude did not хотел использовать jpanel, но я думаю, что это wt я должен сделать: D thnx (Y) –