2014-08-27 2 views
0

Я пытаюсь рисовать линии в программе, и я постоянно получаю эту ошибку. Что я делаю: У меня есть JFrame с BoxLayout (в Y_AXIS), и внутри этого кадра у меня есть 6 JPanel один ниже другого. В первых 2-х панелей у меня есть некоторые компоненты JLabel и текстовых полей JTextField, и я хотел бы рисовать линии в третьем JPanel, и я сделал это:java.lang.NullPointerException when drawOval в JPanel

public void Dibujar(int vidas){ Graphics graf = panel3.getGraphics(); if(vidas == 6){ graf.drawOval(10, 10, 30, 30); } else{ graf.drawOval(10, 10, 60, 60); } }

Но при этом я получаю NullPointerException, вместо этого Я попытался использовать метод paintComponent, который он работает, но он рисует ниже всех Jpanels, а не точно Jpanel3.

Если вам нужно объяснить что-то еще, просто скажите мне. Спасибо вам большое заблаговременно.

+0

живопись должна быть сделана в paintComponent(). Опубликуйте короткий, но полный runnable пример, покрасьте в paintComponent() и воспроизведите проблему. Расскажите, что вы ожидаете от этого, и что он делает. –

ответ

0

Вызовите этот метод в разделе Panel3. Вы хотите, чтобы paint конкретным component.

@Override 
class PaintExtension extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     int vidas = GetVidas(); //Make a method to get the vidas 
     super.paintComponent(g); 
     if(vidas == 6) 
     { 
      g.drawOval(10, 10, 30, 30); 
     } 
     else 
     { 
      g.drawOval(10, 10, 60, 60); 
     } 

    } 
} 

В GUI:

panel3.add(new PaintExtension()); 
+1

Спасибо вам большое, это очень помогло, теперь оно отлично работает. – Santiago

+0

Опустите эту «графику g = getGraphics();» и добавьте вместо нее «super.paintComponent (g)». (Кроме того, метод может быть «защищен» и должен иметь аннотацию '@ Override'.) – Marco13

+0

Спасибо, я отредактирую. Я программирую почти бесконечно на C#, и я забыл о мелочах. – Adam

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