2016-04-16 2 views
1

Я новичок в java, и мне нужно сделать игру.Как инициализировать несколько компонентов paintComponents?

Проблема, с которой я столкнулся, и попытался решить за последние два часа, как рисовать изображение с помощью Jpanel и paintComponent в двух разных классах. Кажется, я не могу заставить его работать.

Вот код для моего второго класса

public class Background extends JPanel { 

    private BufferedImage image; 

    public Background() { 

     try { 
      image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png")); 
     } catch (Exception e) { 
      System.out.println("Error loading background image"); 
     } 
     repaint(); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     super.paintComponent(g); 
     g2d.drawImage(image, 0, 0, null); 
     g2d.fillRect(100, 100, 100, 100); 
    } 

} 

Это в значительной степени то же самое, что и в моем классе уровне, но это не отображается на экране. По причинам, которые не стоит упоминать, мне нужно, чтобы это был отдельный класс.

Спасибо.

+1

Если изображение существует, этот код выглядит нормально. Проблема, вероятно, происходит откуда-то еще. – Karl

+0

Убедитесь, что вы добавляете фон в свой JFrame и что он не находится под другими кадрами. – Karl

+0

karl, как бы я это сделал? –

ответ

-1

Ваш код здесь работает, черный прямоугольник появляется на JPanel.

Я подозреваю, что вы добавляете другие JPanels поверх этого.

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 

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

public class Background extends JPanel { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     f.getContentPane().add(new Background()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(800, 600); 
     f.setVisible(true); 
    } 

    private BufferedImage image; 

    public Background() { 

     try { 
      image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png")); 
     } catch (Exception e) { 
      System.out.println("Error loading background image"); 
     } 
     repaint(); 

    } 

    @Override 
    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     super.paintComponent(g); 
     g2d.drawImage(image, 0, 0, null); 
     g2d.fillRect(100, 100, 100, 100); 
    } 

} 
+0

что ты говоришь ??? «Ваше решение работает»? это ответ? – gpasch

+0

да, вот что я спрашиваю, как мне два, я знаю, что он должен работать один –

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