Ir para conteúdo
Fórum CódigoFonte.net
Entre para seguir isso  
glaydersonjonathan

Regras de Negócio UI Applet ArvoreAVL

Recommended Posts

Boa tarde,

Pessoal eu estou tentando terminar um projeto que simula através de interface gráfica uma fila. Eu tenho um projeto de alguém que conseguiu fazer um árvore AVL dessa maneira. À princípio, eu pensei que seria fácil fazer a adaptação porque como já tinha uma árvore AVL toda pronta (maior dificuldade), fazer uma fila desta seria bem fácil. Pois bem, me enganei. Já está pronta a minha fila encadeada, ela funciona perfeitamente, além disso, a maior parte do Applet já está montado com os eventos dos botões funcionando e etc. Massss os métodos de desenho do applet estão impossíveis de entender. Já estou várias semanas tentando entender o que o cara fez nessa ÁrvoreAVL dele e não me sai nada. Logo não tem como eu construir minha fila, se antes não entender como funciona os métodos de pintura original. Alguém experiente pode me ensinar as regras de negócio envolvidas nesses métodos?

public void paint(Graphics g) {

try {

for (int i = 1; i < showTree.length; i++)

g.drawLine(showTree[i][2],

showTree[i][1]+50,

showTree[showTree[i][4]][2],

showTree[showTree[i][4]][1]+50);

for (int i = 0; i < showTree.length; i++) {

int margin=-13;

if(showTree[i][0]<-99) margin = -13;

else if(showTree[i][0]<-9) margin = -10;

else if(showTree[i][0]<0) margin = -5;

else if(showTree[i][0]<10) margin = -2;

else if(showTree[i][0]<100) margin = -7;

else if(showTree[i][0]<1000) margin = -10;

if((char)showTree[i][3] == 'L') g.setColor(Color.RED);

else if((char)showTree[i][3] == 'R') g.setColor(Color.GREEN);

else g.setColor(Color.YELLOW);

g.fillOval(showTree[i][2]-12, showTree[i][1]+38,25,25);

g.setColor(Color.BLACK);

g.drawString(Integer.toString(showTree[i][0]), showTree[i][2]+margin, showTree[i][1]+54);

}

}catch(NullPointerException e) {

}

}
public synchronized void pause(String process) {

showTree = tree.toCoordinates(25, getWidth(),true);

showStatus(process);

	 update(getGraphics());

try {

wait(delay);

}

catch (InterruptedException e) {

}

}
public int[][] toCoordinates(int h, int w, boolean fixH) {

int c[][] = new int[size][5];

int i[] = { 0 };

int hStep = (height > 1) ? h / (height - 1) : 0;

hStep = fixH ? h : hStep;

traverseToCoordinates(root, i, c, 0, w / 2, hStep, w / 4, -1);

return c;

}

private void traverseToCoordinates(

TreeEntry e,

int i[],

int c[][],

int y,

int x,

int h,

int w,

int p) {

int curI = i[0];

if (e == null)

return;

if (e.element instanceof ElementObject) {

c[i[0]][0] = ((ElementObject) (e.element)).val; // integer value

c[i[0]][1] = y; // vertical position

c[i[0]][2] = x; // horizontal position

c[i[0]][3] = (int) e.balanceFactor; // balance factor

c[i[0]][4] = p; // index of parent in c[][]

i[0]++;

}

traverseToCoordinates(e.left, i, c, y + h, x - w, h, w / 2, curI);

traverseToCoordinates(e.right, i, c, y + h, x + w, h, w / 2, curI);

}

É claro que não está 100% orientado a objetos e organizado como se deveria, por exemplo, no método public int[][] toCoordinates(int h, int w, boolean fixH) ele usa uma matriz de 5 colunas para guarda informações de posições X e Y que devem ser traçadas as retas. Bom se eu entender as regras de negócio, a lógica de funcionando dessa árvore, com certeza consigo montar uma fila, que acredito ser bem mais fácil de fazer. Em anexohttp://dl.dropbox.co...pletDemoAVL.zip está o projeto Eclipse desses métodos, vocês podem ver que o projeto original dele funciona perfeitamente, inclusive, quando você aumenta o tamanho da tela fica melhor a visualização da árvore. No pacote modificado está minha tentativa de fazer a tal fila, até o momento fail por causa dessa interface gráfica.

Obrigado por todas as explicações desde já. Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×
×
  • Criar Novo...