problem z repaint

0

od razu chcę powiedzieć że nie jestem mistrzem w tym języku więc liczę na cierpliwość i wyrozumiałość. Problem polega na tym że muszę napisać program który graficznie przedstawi parę prostych algorytmów. Problem jest w tym że obiekty rysują się dopiero pod koniec programu. Zamieszczam kod:

#tu wstawię nowy efekt#
a i jest jeszcze jeden problem. 3 przyciski pojawiają się dopiero po najechaniu na nie. w czym może być problem?

0

A w metodzie main używasz może wątku swinga do tworzenia tego okna?
Np:

SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				MainWindow window = new MainWindow();
				window.setVisible(true);
				
			}
		}); 
0

public static void main(String args[]){
Okno okno=new Okno();
}

jak widzisz niestety nie. A co by to zmieniło?

0

zamieszczam najnowsza wersje programu. w tej chwili poprawnie działa tylko przy długości ciągu 100. W obu wersjach i wszystkie algorytmy sortowania działają. Nadal problem z rysowaniem. Pomóżcie proszę.
kod w linku:

#tu wstawię nowy efekt#

0

Spróbuj to zrobić po mojemu.
Chodzi o to, że tworzenie/dodawanie kontrolek/okien musi być obsługiwane w Kolejce Swing, przy pomocy tego fragmentu który Ci napisałem.
W przeciwnym razie będziesz miał takie klocki, jak znikające przyciski itp. itd.

0

dzieki :)

0

niestety nie poprawiło to sytuacji. Co do wątków czy jest możliwość, żeby zatrzymać na chwilę aplikację, aby w innej klasie coś wydrukował?

0
class Panel extends JPanel {
int a[];
int b;
Graphics g;
public void paintComponent(Graphics g) {
	if (a != null)
	{
		int i;
		for(i=0;i<100;i++)
		{
			g.drawLine(b*(3*i+10),b*100,b*(3*i+10),b*(2*a[i]+100));
		
		}
	}
}

Musisz pamiętać, że nie można używać czegoś czego nie ma. Początkowo tablica a jest null ;].

0

zauważyłem już to :) i masz rację. teraz jest problem w tym tylko że kresek nie rysuje na bieżąco. uporządkuję kod i prześlę raz jeszcze :)

0

albo prześlę tak jak mam. #miejsce#

0

W klasie Panel wywołujesz swoją funkcję paintComponent z g (Graphics), którego nie inicjujesz. Możesz przed wywołaniem

paintComponent(g, dane);

dać

g = this.getGraphics();

albo w ogóle zrezygnować z tego parametru i pobierać go w tej funkcji.

0

Imho, masz złą organizację klasy Panel. Tablica int[] dane jest polem w tej klasie, zatem jest widoczna w każdej metodzie i nie ma potrzeby jej przekazywać.
Powinno być

   public void paintComponent(Graphics g)
   {
     ...
   }

Samodzielne wywoływanie metody paintComponent() jest złym rozwiązaniem, należy wywołać repaint(), a paintComponent(Graphics g) w magiczny sposób samo się wykona.

0

czy wtedy narysuje mi te linie?

0

@bo
już to poprawiłem, zaraz sprawdzę jak działa i będziemy dalej myśleć.

0

jest nieźle. Teraz muszę odpowiednio to uporządkować. Będę pytał jakby co.

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