Przekazanie JPanela do drugiej klasy

0

Piszę sobie prostą gierkę podczas nauki javy. W klasie A mam zadeklarowaną sporą ilość JPaneli. Chciałem móc przekazywać konkretny panel do klasy B, tam jest wykonywane sprawdzenie i w zależności od wyniku w klasie A są wykonywane odpowiednie czynności.

class A{
 private JPanel p01,p02,p03,p04;

}
class B{
private void sprawdzCzarne(JPanel p1, JPanel b1, JPanel s1){

        if (p1.getBackground() == b1.getBackground())
            s1.setBackground(Color.BLACK);

Jeżeli teraz wywołam w klasie A coś w stylu

B test = new B();
test.sprawdzCzarne(p01, p02, p03)

To wywala mi: java.lang.NullPointerException. P1, b1, s1 nie są zainicjowane, ale jak dodam JPanel p1 = new JPanel(); to tworzą się nowe obiekty. Czy jest jakiś sposób na przekazywanie sobie tych paneli pomiędzy dwoma klasami?

0

Pewnie w klasie A nie tworzysz pól p01,..., tworzysz tylko zmienne lokalne o takich samych nazwach.

0

Zapomniałem napisać. Tworzę mam osobną metodę do której przekazuję wszystkie panele

private void dodajPanele(JPanel p, JPanel p1,JPanel p2,JPanel p3, JPanel p4 ){
        p1 = new JPanel();
        p1.setBackground(kolorTla);
        p1.setBounds(10, 10, 15, 15);
        p1.setBorder(styl);
        p.add(p1);
...

Wywołuję tą metodę w klasie A:

Jpanel panel1 = new JPanel();
dodajPanele(panel1, p01, p02, p03, p04);

Jak w klasie B zmieniłem trochę metodę, to program się nie wywalał, ale pokazywał nieprawidłowe wyniki.

private void sprawdzCzarne(JPanel p1, JPanel b1, JPanel s1){
        p1 = new JPanel();
        b1 = new JPanel();
        s1= new JPanel();
        if (p1.getBackground() == b1.getBackground())
            s1.setBackground(Color.BLACK);
0

To w którym miejscu utworzyłeś w klasie A pole o nazwie p01? W kodzie, który podałeś nie ma tworzenia pola o nazwie p01. Jeśli nie wierzysz, to dodaj instrukcję

JPanel panel1 = new JPanel();
dodajPanele(panel1, p01, p02, p03, p04);
System.out.println(p01);
0

W klasie A utworzyłem pole p01, przekazałem je do metody z klasy B i wtedy się program wysypuje.

0

Pokaż kod, który tworzy pole p01.

0
 private JPanel p01,p02,p03,p04, p11,p12,p13,p14;

 private void dodajSprPanel(JPanel p){
        panel0 = new JPanel();
        panel0.setLayout(null);
        panel0.setBackground(kolorTla);
        panel0.setBounds(40,650 , 300, 100);
        dodajPanele(panel0,p01,p02,p03,p04,s01,s02,s03,s04);
        p.add(panel0);

private void dodajPanele(JPanel p, JPanel p1,JPanel p2... ){
        int wielkoscKwadratu = 15;

            p1 = new JPanel();
            p1.setBackground(kolorTla);
            p1.setBounds(10, 10, wielkoscKwadratu, wielkoscKwadratu);
            p1.setBorder(styl);
            p.add(p1);
...

I wywołanie metody dodajSprPanel

JPanel sprawdzajacyPanel = new JPanel();
dodajSprPanel(sprawdzajacyPanel);
1

Czy Ty czytasz odpowiedzi? Napisałem Ci cztery posty temu, że ten kod **nie tworzy** pola p01.

0

Ok, miałeś rację nie tworzyłem, myślałem, że powyższy kod tworzy te nowe pole. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1