2015-11-04 1 views
0

Я работаю над созданием простой программы Java2D. Предполагается рисовать прямоугольники из другого класса, но это не работает. Я бы очень признателен, если бы один из вас, ребята, мог занять несколько минут, чтобы посмотреть, где я ошибаюсь. Это мое последнее задание завтра.Рисование прямоугольника из другого класса

Вот код, который я работал до сих пор:

Block.java

public class Block extends JPanel { 

    public Graphics2D g; 
    protected int posX = 0; 
    protected int posY = 0; 
    protected int w = 100; 
    protected int h = 100; 

    public void draw() { 
     g.setColor(Color.GREEN); 
     g.fillRect(posX, posY, w, h); 
    } 
} 

Вот главный класс:

public class main { 

    private static final long serialVersionUID = 1L; 

    private Block[] pie = new Block[5]; 
    Timer timer; 

    main() { 
     final JPanel screen = new JPanel() { 

      int x = 0; 
      int step = 10; 

      public void paintComponent(Graphics g) { 

       super.paintComponent(g); 

       pie[0].g = (Graphics2D) g; 
       pie[0].draw(); 

      } 

     }; 

     JFrame f = new JFrame("Test Lab"); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     f.setContentPane(screen); 
     f.pack(); 
     f.setLocationByPlatform(true); 
     f.setResizable(false); 
     f.setVisible(true); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable(){ 
      public void run(){ 
       new main(); 
      } 
     });  
    } 

} 

Большое спасибо.

+1

Так в чем проблема? Что должно произойти и что происходит вместо этого? – MikeTheLiar

+0

Я понятия не имею. Есть несколько сообщений, появляются на консоли: Исключения в потоке "АВТ-EventQueue-0" java.lang.NullPointerException \t на главном $ 1.paintComponent (main.java:54) \t в javax.swing.JComponent.paint (Неизвестный источник) где строка 54 относится к pie[0].g = (Graphics2D) g; Mdkusuma

+0

см. Http://stackoverflow.com/a/17871842/635678 для получения справки. что такое строка 54 в main.java? –

ответ

0
private Block[] pie = new Block[5]; 

Вы создаете массив размером 5, но вы не добавили Блока в массив,

pie[0].g = (Graphics2D) g; 
pie[0].draw(); 

Так что, когда вы пытаетесь ссылаться на объект с индексом 0, вы получите NPE.

Так в начале вашего constuctor вы можете добавить:

pie[0] = new Block(); 

Кроме того, ваш метод рисования должен быть определен что-то вроде:

public void draw(Graphics g) 

затем в коде картины вы будете использовать:

pie[0].draw(g); 

То есть вам не нужно хранить объект Graphics в вашем классе Block. Передайте объект Graphics методу.