2014-11-03 3 views
1

Я пытаюсь добавить фоновое изображение в JPanel. Компонент paint, похоже, не рисует изображение, импортированное для фона. Может ли кто-нибудь указать, почему? Я импортировал все необходимые библиотеки.проблема создания фонового изображения для панели

public class ImagePanel extends JPanel { 
    public static BufferedImage image; 

    public ImagePanel() { 
     try { 
      image = ImageIO.read(new File("cards/background.png")); 
      System.out.println("Image Import Succesful"); 
     } catch (IOException ex) { 
      System.out.println("IMAGE IMPORT ERROR"); 
     } 
     ImageIcon icon = new ImageIcon(image); 
     icon.setImage(image); 
     JLabel imageLabel = new JLabel(icon); 
     add(imageLabel); 

    } 


    @Override 
    protected void paintComponent(Graphics g) { 
     System.out.println("painted"); 
     super.paintComponent(g); 
     g.drawImage(image, 100, 100, 
        this); 
    } 
} 
+2

Ваш paintComponent override - это место для рисования фона. Вы должны удалить код ImageIcon/JLabel – ControlAltDel

+0

Да, почему _do_ вы добавляете метку _and_ красите изображение? Вы получаете сообщение "IMAGE IMPORT ERROR"? –

+0

Нет. Я не получаю ошибку импорта изображения. И это не работает даже после удаления кода, связанного с ImageIcons и Labels. Компонент лакокрасочного покрытия не работает –

ответ

0

Куда вы загрузите свое изображение? A файловая система или classpath?

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

Вы можете нарисовать фон панели, если вы загружаете изображение из классов как это:

public class ImagePanel extends JPanel { 

    private ImageIcon imageIcon; 

    public ImagePanel() { 
     prepareBackground(); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (null!= imageIcon) 
       g.drawImage(image.getImage(), 100, 100, this); 
      else 
       System.err.println("Background image is NULL!!"); 
     } 
    } 

    private void prepareBackground() { 
     final java.net.URL imgURL = ImagePanel.class.getResource("cards/background.png"); 
     imageIcon = new ImageIcon(imgURL); 
    } 
} 

Если вы загружаете из файловой системы, вы можете исправить код здесь:

image = ImageIO.read (новый файл ("COMPLETE_PATH_TO_background.png"));

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