2016-07-06 9 views
0

java를 사용하여 그래프를 그리려고합니다.이 작업을 수행하기 위해 내 그래프의 모든 정보를 내 메인 프로그램의 클래스 인스턴스로 가져 왔습니다. 그래프를 그리려면이 infos를 this과 같은 xml 파일로 전송해야합니다. 그래프가 링크 예제보다 훨씬 간단합니다. 제 문제는 다음과 같습니다. 클래스의 내 인스턴스를이 형식으로 전송하는 방법을 알지 못합니다.Java 클래스의 인스턴스를 xml 파일로 전송

Atividade 클래스 : 내가 가지고있는 코드 아래

(코드는, 난 그냥 링크의 XML 형식으로 클래스 "atividade"의 인스턴스의 부가 요소를 전송하는 방법을 올바른 필요가있다

.
/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package trabalho_m3; 

import java.util.Arrays; 

public class Atividade { 

    private int idAtividade; 
    private String nomeAtividade; 
    private float tempoDuracao, tInicioCedo, tTerminoCedo, tTerminoTarde, tInicioTarde, folga; 
    private int qtdPredecessores, qtdSucessores; 
    private Atividade predecessores[], sucessores[]; 
    private int cnt_aux1 = 0, cnt_aux2 = 0; 

    public Atividade(int id, String nome, float duracao, int nPre, int nSuc){ 
     this.idAtividade = id; 
     this.nomeAtividade = nome; 
     this.tempoDuracao = duracao; 
     this.qtdPredecessores = nPre; 
     this.qtdSucessores = nSuc; 
     this.predecessores = new Atividade[this.qtdPredecessores]; 
     this.sucessores = new Atividade[this.qtdSucessores]; 
    } 

    /* 
    * Método que calcula o TEMPO DE INÍCIO CEDO(Tes), assim como 
    * o TEMPO DE TÉRMINO CEDO(Tef) das atividades do projeto. 
    */ 
    public void calcular_Tes_Tef(){ 

     // Cálculo do Tempo de Início Cedo da atividade (Tes). 
     if(this.qtdPredecessores == 0){ 
      this.tInicioCedo = 0; 
     } else { 
      this.tInicioCedo = this.maxTefPredecessores(this.predecessores); 
     } 

     // Cálculo do Tempo de Término Cedo da atividade (Tef). 
     this.tTerminoCedo = (this.tInicioCedo + this.tempoDuracao); 
    } 

    /* 
    * Método que calcula o TEMPO DE TÉRMINO TARDE(Tlf), assim como 
    * o TEMPO DE INÍCIO TARDE(Tls) das atividades do projeto. 
    */ 
    public void calcular_Tlf_Tls(){ 

     // Cálculo do Tempo de Término Tarde da atividade (Tlf). 
     if(this.qtdSucessores == 0){ 
      this.tTerminoTarde = this.tTerminoCedo; 
     } else { 
      this.tTerminoTarde = this.minTlsSucessores(this.sucessores); 
     } 

     // Cálculo do Tempo de Início Tarde da atividade (Tls). 
     this.tInicioTarde = (this.tTerminoTarde - this.tempoDuracao); 
    } 

    /* 
    * Método calcula a FOLGA(R) das atividades do projeto. 
    */ 
    public void calcular_R(){ 

     // Cálculo da Folga (R). 
     this.folga = (this.tTerminoTarde - this.tTerminoCedo); 
    } 

    /* 
    * Método encontra o valor MÁXIMO do Tef entre os predecessores 
    * de uma atividade. 
    * 
    * MAX{Tef(K)}; onde K representa as atividades precedentes. 
    */ 
    public float maxTefPredecessores(Atividade predecessores[]){ 
     float maxTef = predecessores[0].tTerminoCedo; 
     for(int i = 1; i < predecessores.length; i++){ 
      if(maxTef < predecessores[i].tTerminoCedo){ 
       maxTef = predecessores[i].tTerminoCedo; 
      } 
     } 
     return maxTef; 
    } 

    /* 
    * Método encontra o valor MÍNIMO do Tls entre os sucessores 
    * de uma atividade. 
    * 
    * MIN{Tls(K)}; onde K representa as atividades sucessoras. 
    */ 
    public float minTlsSucessores(Atividade sucessores[]){ 
     float minTls = sucessores[0].tInicioTarde; 
     for(int i = 1; i < sucessores.length; i++){ 
      if(sucessores[i].tInicioTarde < minTls){ 
       minTls = sucessores[i].tInicioTarde; 
      } 
     } 
     return minTls; 
    } 

    /* 
    * Vincula a uma dada atividade suas precedencias, incluindo 
    * seus precedentes no Array predecessores[]. 
    */ 
    public void setarAtividadePredecessora(Atividade atividadePre){ 
     if(cnt_aux1 == this.qtdPredecessores){ 
      System.out.println("A atividade " + this.nomeAtividade + " nao suporta mais pre-requisitos!"); 
     } else { 
      this.predecessores[this.cnt_aux1] = atividadePre; 
      this.cnt_aux1++; 
     } 
    } 

    /* 
    * Vincula a uma dada atividade seus sucessores. 
    */ 
    public void setarAtividadeSucessora(Atividade atividadeSuc){ 
     if(cnt_aux2 == this.qtdSucessores){ 
      System.out.println("A atividade " + this.nomeAtividade + " nao suporta mais atividades sucessoras!"); 
     } else { 
      this.sucessores[this.cnt_aux2] = atividadeSuc; 
      this.cnt_aux2++; 
     } 
    } 

    // Retorna o NOME de uma atividade. 
    public String getNome(){ 
     return this.nomeAtividade; 
    } 

    // Retorna a FOLGA(R) de uma atividade. 
    public float getFolga(){ 
     return this.folga; 
    } 

     public float getPredecessores(){ 
     return this.qtdPredecessores; 
    } 

     public float getId(){ 
     return this.idAtividade; 
    } 

     public float getSucessores(){ 
     return this.qtdSucessores; 
    } 

    /* 
    * Imprime todas as informações de uma atividade: 
    * Id, Nome, Precedencias, Sucessores, t, Tes, Tef, Tlf, Tls, R. 
    */ 
    public void informacoesAtividade(){ 
     System.out.println(); 
     System.out.println("Id: " + this.idAtividade); 
     System.out.println("Nome: " + this.nomeAtividade); 

     if(this.qtdPredecessores == 0){ 
      System.out.println("Precedencia: --"); 
     } else { 
      System.out.print("Precedencia: "); 
      for(int i = 0; i < this.predecessores.length; i++){ 
       System.out.print(predecessores[i].nomeAtividade + " "); 
      } 
      System.out.println(); 
     } 

     if(this.qtdSucessores == 0){ 
      System.out.println("Sucessores: --"); 
     } else { 
      System.out.print("Sucessores: "); 
      for(int j = 0; j < this.sucessores.length; j++){ 
       System.out.print(sucessores[j].nomeAtividade + " "); 
      } 
      System.out.println(); 
     } 

     System.out.println(); 
     System.out.println("t: " + this.tempoDuracao); 
     System.out.println("Tes: " + this.tInicioCedo); 
     System.out.println("Tef: " + this.tTerminoCedo); 
     System.out.println("Tlf: " + this.tTerminoTarde); 
     System.out.println("Tls: " + this.tInicioTarde); 
     System.out.println("R: " + this.folga); 
     System.out.println(); 
    } 
} 

홈페이지 :

package trabalho_m3; 

import java.io.IOException; 
import java.util.Scanner; 

public class TRABALHO_M3 { 

    public static void Tes_Tef(Atividade[] Ativ){ 
     for(int i = 0; i < Ativ.length; i++){ 
      Ativ[i].calcular_Tes_Tef(); 
     } 
    } 



    public static void Tlf_Tls(Atividade[] Ativ){ 
     for(int i = (Ativ.length - 1); i >= 0; i--){ 
      Ativ[i].calcular_Tlf_Tls(); 
     } 
    } 

    public static void R(Atividade[] Ativ){ 
     for(int i = 0; i < Ativ.length; i++){ 
      Ativ[i].calcular_R(); 
     } 
    } 

    public static void atividadeInfo(Atividade[] Ativ){ 
     for(int i = 0; i < Ativ.length; i++){ 
      Ativ[i].informacoesAtividade(); 
     } 
    } 

    public static void caminhoCritico(Atividade[] Ativ){ 
     System.out.print("Caminho Critico: "); 
     for(int i = 0; i < Ativ.length; i++){ 
      if(Ativ[i].getFolga() == 0.0){ 
       System.out.print(Ativ[i].getNome() + " "); 
      } 
     } 
     System.out.println(); 
    } 



    public static void main(String[] args) throws IOException { 
     int qtd = 0; 
     int aux; 
     String rotulo; 
     float peso; 
     int predecessores, sucessores; 
     Scanner s = new Scanner(System.in); 
     System.out.println("Informe a quantidade de atividades: "); 
     qtd = s.nextInt(); 
     Atividade atividades[] = new Atividade[qtd]; 
     for (int i = 0; i < qtd; i++){ 
      System.out.println("Informe o rótulo da atividade["+(i+1)+"]: "); 
      rotulo = s.next(); 
      System.out.println("Informe a duracao da atividade["+(i+1)+"]: "); 
      peso = s.nextFloat(); 
      System.out.println("Informe a quantidade de predecessores da atividade["+(i+1)+"]: "); 
      predecessores = s.nextInt(); 
      System.out.println("Informe a quantidade de sucessores da atividade["+(i+1)+"]: "); 
      sucessores = s.nextInt(); 
      atividades[i] = new Atividade(i,rotulo,peso,predecessores,sucessores); 
      System.out.println("Pressione Enter para continuar..."); 
      System.in.read(); 
     } 

     for (int i = 0; i < qtd; i++){ 
      for (int b = 0; b < qtd; b++){ 
       System.out.println("Atividade "+atividades[b].getNome()+" - ID = "+atividades[b].getId()); 
      } 
      System.out.println("Pressione Enter para continuar..."); 
      System.in.read(); 
      if (atividades[i].getPredecessores() > 0) { 
       System.out.println("Atividades Predecessoras de "+atividades[i].getNome());  
       for (int k=0; k<atividades[i].getPredecessores(); k++){ 
          System.out.println("Informe o ID da atividade predecessora de numero "+(k+1)+" ..."); 
          aux = s.nextInt(); 
          atividades[i].setarAtividadePredecessora(atividades[aux]); 
          System.out.println("Pressione Enter para continuar..."); 
          System.in.read(); 
          Runtime.getRuntime().exec("clear"); 
        } 
      } else { 
        System.out.println("A atividade ["+atividades[i].getNome()+"] não possui predecessores"); 
        System.out.println("Pressione Enter para continuar..."); 
        System.in.read(); 
      } 
      for (int b = 0; b < qtd; b++){ 
       System.out.println("Atividade "+atividades[b].getNome()+" - ID = "+atividades[b].getId()); 
      } 
      System.out.println("Pressione Enter para continuar..."); 
      System.in.read(); 
      if (atividades[i].getSucessores() > 0) { 
        System.out.println("Atividades Sucessoras de "+atividades[i].getNome()); 
        for (int k=0; k<atividades[i].getSucessores(); k++){ 
          System.out.println("Informe o id da atividade sucessora de numero "+(k+1)+" ..."); 
          aux = s.nextInt(); 
          atividades[i].setarAtividadeSucessora(atividades[aux]); 
          System.out.println("Pressione Enter para continuar..."); 
          System.in.read(); 
        } 
      } else { 
        System.out.println("A atividade ["+atividades[i].getNome()+"] não possui sucessores"); 
        System.out.println("Pressione Enter para continuar..."); 
        System.in.read(); 
      } 
     } 
    Tes_Tef(atividades); 
    Tlf_Tls(atividades);  
    atividadeInfo(atividades); 
    R(atividades); 
    caminhoCritico(atividades); 
    } 
} 

OBS는 :. 내가 그래프가 필요 그리는 데 사용할 예정하고있는 LIB 내가 prefuse lib 디렉토리를 사용하기 위하여려고하고 있기 때문에 나는 XML 파일로 전송해야 .

답변

2

프리 퓨즈를 사용하여 그래프를 그릴 필요가있는 경우 xml 파일을 만들 필요가 없습니다. prefuse 그래프 객체를 사용하여 노드, 가장자리를 직접 추가 할 수 있습니다.

Graph graph = new Graph(); 
    graph.getNodeTable().addColumn("duration", double.class); 
    Node n1 = graph.addNode(); 
    n1.setDouble("duration", 20.0); 
    Node n2 = graph.addNode(); 
    Edge e = graph.addEdge(n1, n2); 

당신은 사용자 정의 클래스의 모든 노드와 엣지를 반복해야합니다 다음은 2 개 노드, 1 가장자리, 1 개 노드의 속성 값을 간단한 예입니다.

+0

좋아, 이해했다. for 루프를 사용하여이 작업을 수행 할 수 있습니까? 그리고 코드에서 두 번째 줄과 네 번째 줄의 기능은 무엇입니까? 프리 후스 라이브러리를 사이트에서 다운로드했습니다. lib 디렉토리와 같은 netbeans에 추가해야합니까? –