Ir para conteúdo
Fórum CódigoFonte.net

glaydersonjonathan

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

  1. 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
×
×
  • Criar Novo...