Mateusz Groth

Mateusz Groth Inżynier sieciowy

Temat: wywoływanie metody paintComponent

Witam,
Próbuje w moim projekcie w głównej klasie wywołać metodę paintComponent z innej klasy. I niestety mam z tym problem. W klasie gdzie została ta metoda zdefiniowana wygląda to mniej więcej tak. Gdzie Graphics2D został również globalnie ustawiony jako static.

static void paintComponent(){
w tej metodzie wykorzystuje rysowanie z podklasy Graphics2D.


g2.setPaint(Color.red);
}

i teraz w klasie głównej wywołuje ta metodę.
KlasaZew.paintComponent();

przy kompilacji nie zwraca mi błędów, natomiast gdy ją uruchamiam otrzymuje błąd:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
-w miejscu wywołania setPaint
oraz w miejscu wywołania metody w klasie głównej.

Czy ktoś mógłby mi podpowiedzieć w jaki sposób mam wywoływać tą metodę?

konto usunięte

Temat: wywoływanie metody paintComponent

Raczej ciężko dojść z tego kawałka kodu co jest konkretnie skopane, ale po błędzie można powiedzieć, że po prostu egzemplarz klasy ? nie jest utworzony, albo g2 nie zawiera nań referencji.

Nieco więcej kodu i wszystko byłoby jasne ;)
Mateusz Groth

Mateusz Groth Inżynier sieciowy

Temat: wywoływanie metody paintComponent

Może jeszcze raz przedstawię jak to wygląda.

public class Main{

Klasa_zew k= Klasa_zew();

public Main(){};

public class Rysuj{
protected void paintComponent(Graphics g){
super.paintComponent(g);

}
static JMenuBar PasekMenu(){

//dla Checkboxa wykonywane jest zdarzenie

public void actionPerformed(ActionEvent event) {

Klasa_zew.paintComponent(); // w tym miejscu wskazuje mi błąd
}
}
private static void OknoGUI(){}
public void main(String[] args){
OknoGUI();
}
}
w osobnym pliku znajduje się klasa zewnętrzna.
public class Klasa_zew{
static Graphics2D g2;
Klasa_zew(){
Wczytaj_dane();
}
static void Wczytaj_dane(){}
static void paintComponent(){
// i tutaj rysuje mi figury..
g2.setPaint(Color.red); // i tutaj wskazuje błąd.
g2.fill(filledPolygon);
}
}

Czy ja w jakiś zły sposób deklaruje zmienną Graphics2D g2?
że nie potrafi jej wywołać w klasie main? Czy to że już w klasie main używam
paintComponent wpływa na to że mi się wszystko krzaczy?W jaki sposób sobie z tym poradzić?

konto usunięte

Temat: wywoływanie metody paintComponent

Bez kodu ciezko powiedziec, ale obawiam sie, ze zamiast "po bozemu" zrobic jak mowia tutoriale (np. http://download.oracle.com/javase/tutorial/uiswing/pai... gdzies na skroty albo wrecz w maliny. Statyczny paintComponent(), statyczny Graphics2D - niekoniecznie musi byc to zle, ale to nie sa pozytywne symptomy.

konto usunięte

Temat: wywoływanie metody paintComponent

Powinieneś wywołać getGraphics() na komponencie, samo zadeklarowanie zmiennej nic nie da. Jeśli chcesz, żeby Twoje paintComponent override'owało metodę z klasy nadrzędnej, musisz dodać do parametru metody "Graphics2D g2".
Mateusz Groth

Mateusz Groth Inżynier sieciowy

Temat: wywoływanie metody paintComponent

Dariusz Wawer:
Powinieneś wywołać getGraphics() na komponencie, samo zadeklarowanie zmiennej nic nie da. Jeśli chcesz, żeby Twoje paintComponent override'owało metodę z klasy nadrzędnej, musisz dodać do parametru metody "Graphics2D g2".


Czy mógłbyś mi mniej więcej napisać gdzie to powinno być wywołane?
Mateusz Groth

Mateusz Groth Inżynier sieciowy

Temat: wywoływanie metody paintComponent

poradziłem sobie, nie wiem czy tylko w taki sposób można to zrobić ale zrobiłem to tak.

W klasie zewnętrznej dopisałem. paintComponent(Graphics2D g2)

Natomiast w klasie głównej tą metodę wywołuje również w paintComponent.

Następna dyskusja:

Metody komunikacji w aplika...




Wyślij zaproszenie do