Dodawanie punktów do listy, rysowanie obiektów w SWING'u

0

Panowie, pierwszy post, nie zjedzcie mnie : )

Jestem newbie, robię Conwayowską grę w życie.
Aktualnie jestem na etapie rysowania na panelu losowo kwadratów. Jak wiadomo muszę zapamiętać, ich położenie. Tutaj pojawia się pierwszy problem. Przy wypełnianiu listy umieszczonej w paintComponent, złożonej z punktów program wysypuje się. Samo zapisywanie wartości x1 , x2 do punktu nie działa. Nie mam pojęcia dlaczego. Kombinowałem na kilka sposobów, ale zawsze jest to samo. Dostanę małą pomoc?

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JPanel;

public class Panel_Gry extends JPanel {
	
	//tworzymy zmienne, obiekty
	Rectangle2D rect;
	int x1,y1;  // polozenie kwadratu, 

	Point p;
	ArrayList<Point> lista = new ArrayList();  // tutaj zapisujemy wszystkie powstałe obiekty
	int []tablica;
	

	//tworz konstruktor
	public Panel_Gry(){
	}
	
	
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		
		//tworz petle rysujaca losowo polozone kwadraty
		for(int i=0; i<10; i++){
			Random a = new Random();
			Random aa = new Random();
			int x1 = a.nextInt(29)*10;
			int y1 = aa.nextInt(29)*10;

			p.setLocation(x1, y1);
			lista.add(p);
			
			rect = new Rectangle2D.Double(x1, y1, 10, 10);
			g2d.draw(rect);
			if(x1<100){           //sprawdzenie czy x<100 , jesli tak - wypelnj kwadrat
				g2d.fill(rect);
			}
			
		}	
	}

}
0

Dlaczego losowanie robisz w metodzie paintComponent? Jak użytkownik zminimalizuje okno, a potem przywróci, to będzie miał zupełnie inny rysunek.

0

To był mój drugi problem. Inne rysunki przy rozciąganiu, minimalizowaniu itp. Tak więc ten problem rozwiązany.

Początkowo pętlę robiłem w konstruktorze, aczkolwiek na ekranie pokazywał mi się jedynie jeden obiekt. Kombinowałem z metodą paint() oraz repaint() ale nic to nie dało.

0

Poczekajcie, zaraz coś pomyślę.

0

Ok, działa. W razie dalszych pytań będę pytał !

0

@bogdans
"W tym momencie:

 p.setLocation(x1, y1);

zmienna p ma wartość null."

Dlaczego ma wartość zerową, skoro krok wcześniej do x1 i y1 zostały dodane wartości?

0

Ja się nie wypowiadałem o x1 i y1. napisałem, że zmienna p ma wartość `null. Odpowiedni fragment kodu jest całkowicie błędny. Powinno być tak:

ArrayList<Point> lista = new ArrayList<>();
...
int x1 = a.nextInt(29)*10;
int y1 = aa.nextInt(29)*10;
lista.add(new Point(x1,y1));

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