Mislim da klasa Node i ArrayNode funkcionisu dobro jer kad pokrenem program niz se iscrtava.
"Problem" je kad se pokrene moja metoda run(NIJE "nit"-thread) i mislim da me zeza metoda repaint() (tj.paint) jer se sortiranje izvrsava ali to se ne vidi (stoji onaj isti pocetni niz);
Medjutim, kada prelazim sa nekim drugim prozorom preko mog glavnog prozora ili kad minimizujem pa vratim prozor vidi se da sortiranje uveliko radi (i to odlicno).
Mislim da treba obratiti paznju na metodu paint u Insertionsort klasi.
Probao sam mnogo varijanti sa metodom paint a saljem poslednju.
Ako neko zeli da pomogne i ima iskustva sa ovakvim stvarima mislim da ce brzo naci problem samo ako prati metode paint u svim klasama i metodu pause() u Insertionsort jer se u njoj trazi pauza i repaint()
//klasa Node - ona je Ok - iscrtava kvadratic sa brojem
import java.awt.*;
class Node extends Rectangle //Rectangle with number
{
Node(int i, int j, int k)
{
selected = false;
decided = false;
base = false;
n = k;
reshape(i, j, 25, 20);
}
public void paint(Graphics g)
{
if(selected)
g.setColor(selectedColor);
else
if(base)
g.setColor(baseColor);
else
if(decided)
g.setColor(decidedColor);
else
g.setColor(normalColor);
g.fillRect(super.x, super.y, super.width, super.height);
g.setColor(Color.black);
g.drawRect(super.x, super.y, super.width, super.height);
if(n < 10)
g.drawString("" + n, super.x + 8, (super.y + super.height) - 3);
else
g.drawString("" + n, super.x + 3, (super.y + super.height) - 3);
}
static final Color normalColor;
static final Color selectedColor;
static final Color baseColor;
static final Color decidedColor;
static final int defaultW = 25;
static final int defaultH = 20;
boolean selected;
boolean decided;
boolean base;
int n;
static
{
normalColor = Color.white;
selectedColor = Color.yellow;
baseColor = Color.orange;
decidedColor = Color.red;
}
}// kraj klase Node
//Klasa NodeArray - pravi niz kvadratica sa brojevima u njima (taj niz se stampa) - i ovo je Ok
import java.awt.Graphics;
class NodeArray
{
NodeArray(int i)//i is number of rectangles (nodes)
{
init(i);
}
void init(int i)
{
itemNumber = i;
node = new Node[i];
//make new nodes
for(int j = 0; j < i; j++)
node[j] = new Node(40 + 25 * j + j, 30, (int)(Math.random() * 100D));
}
Node[] nodeList()
{
return node;
}
void paint(Graphics g)
{//paint array of nodes
for(int i = 0; i < itemNumber; i++)
node[i].paint(g);
}
static final int defaultX = 40;
static final int defaultY = 30;
private Node node[];
private int itemNumber;
}//kraj klase NodeArray
//Klasa Insertionsort- metode u njoj su Ok samo sto se to vidi kada ja prelazim sa drugim otvorenim prozorima
//preko niza koji se uredjuje- nema druge nego paint-repaint;
import java.awt.Rectangle;
import java.awt.*;
class Insertionsort extends Canvas
{
NodeArray array;
Node ar[];//ovo je nesto sto sam probao pre nego sto sam poslao temu
Insertionsort()
{
}
void run(Node anode[])
{ar = anode;//ovo je nesto sto sam probao pre nego sto sam poslao temu
Node node = new Node(0, 0, 0);
int i = 0;
int j = anode.length;
for(int k = 1; k < j; k++)
{
boolean flag = false;
i = k - 1;
node = anode[k];
node.base = true;
anode[i].selected = true;
pause();
if(node.n < anode[i].n)
{
moveD(node);
flag = true;
}
while(i >= 0 && node.n < anode[i].n)
{
anode[i].selected = false;
if(i > 0)
anode[i - 1].selected = true;
move(anode[i], node);
anode[i + 1] = anode[i];
anode[i] = node;
i--;
}
if(flag)
moveUP(node);
anode[i + 1] = node;
anode[i + 1].base = false;
if(i >= 0)
anode[i].selected = false;
}
for(int l = 0; l < j; l++)
anode[l].decided = true;
pause();
// end();
}
private void moveD(Node node)
{
for(int i = 0; i < 2; i++)
{
node.y += 10;
pause();
}
}
public void paint(Graphics g)
{ for(int i = 0; i < ar.length; i++) //ovo je nesto sto sam probao pre nego sto sam poslao temu
ar[i].paint(g);//ovo je nesto sto sam probao pre nego sto sam poslao temu
//array.paint(g); - ni ovo ne radi
}
private void moveUP(Node node)
{
for(int i = 0; i < 2; i++)
{
node.y -= 10;
pause();
}
}
private void move(Node node, Node node1)
{
for(int i = 0; i < 2; i++)
{
node.x += 13;
node1.x -= 13;
pause();
}
}
public void pause()
{
repaint();
try
{
Thread.sleep(1000);
}
catch(InterruptedException interruptedexception) { }
}
}//Kraj klase Insertionsort
//klasa Diplomski :) "Main class"
import java.awt.*;
import java.awt.event.*;
class Diplomski extends Frame {
NodeArray array = new NodeArray(10);
Insertionsort insertsort = new Insertionsort();
public Diplomski() {
setSize(600, 600);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
//array = new NodeArray(10);
setVisible(true);
insertsort.run(array.nodeList());
}
public static void main(String args[]) {
new Diplomski();
}
public void paint(Graphics g) {
array.paint(g);
}
}
[Ovu poruku je menjao hyle dana 16.05.2006. u 09:09 GMT+1]