在java中使用jgraph绘制一个定向图

时间:2016-07-04 20:05:45

标签: java jgraph

我需要用jgraph创建一个可视化图形,问题是我不知道如何做到这一点。我的程序是CPM / PERT方法,所以我需要在顶点放置一些标签,如下图所示:

enter image description here

我有计算时间和暂息的所有方法,我在控制台中显示所有这些东西,所以我需要至少显示带有节点和顶点的图形,有人有一个示例如何创建一个使用jgraph的简单图形?

在我的代码之下:

/*
 * 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);
    }  
}

0 个答案:

没有答案