Classe para Desenhar no java

18 respostas
W

Gostaria de saber se o java possue uma classe voltada para desenhos que possa ultilizar linhas, retangulos, circulos, arcos, com cordenadas, angulo, escala, tipo os programa CAD.

18 Respostas

D

Tem sim, a classe Graphics e Graphics2D (do pacote java.awt).

oliveirarenan

claro q é possivel fazer desenhos graficos…

usando a classe Grafics e se nao me engano a classe Paint (me corrijam se eu estiver errado… ) :oops:

t+

rodrigo.bossini

Pessoal, aproveitando esse tópico:

Queria saber como desenhar num jPanel depois de ele ja estar construído na tela.

O que quero é simular uma barra que vai do zero ao cem, somando um numero aleatorio a cada iteração do loop. Mas a cada iteração preciso dar um sleep de 1 segundo, pra que cada progresso da barra fique visivel ao usuario…

ficou claro o que preciso? alguém tem alguma dica?

T

Por que é que você não usa uma JProgressBar? Quer algo mais bonitinho (como o progress bar do Windows Vista?)

dstori

Respondendo ao rod.attack, crie uma classe que extenda JPanel e sobrescreva o método paint(Graphics g)

rodrigo.bossini

Pois é, agora to utilizando a progress bar…segue o trecho:

Random r = new Random();
    jProgressBar1.setValue(0);
    jProgressBar1.setMaximum(100);
    int aux  = 0;
    while (aux < 100){
        aux += 1 + r.nextInt(5);         //aux recebe seu valor + um numero pseudorandomico entre 1 e 5
        jProgressBar1.setValue(aux);  
     }

qdo clico em executar, tudo acontece mto rapido, num da pra ver o progresso passo a passo, so da pra ver qdo a barra ja ta completa.

tentei colocar um Thread.sleep (1000) dentro do loop…num rolou…fica tudo travado ate terminar o loop, e ai mostra a barra completa…

dstori

Tenta dar um repaint nela dentro do laço

rodrigo.bossini

Tentei o repaint…ainda num deu certo…

Faz diferença se to usando a progressbar num frame ou num form? alias, qual a diferença entre os dois ? (frame e form) ?

rodrigo.bossini

Desculpem, quis dizer frame e panel.

dstori

Cara entendo que voce está fazendo um teste com este progress certo?
Voce está executando este laço antes de tornar o frame visivel? Caso sim, faça-o depois disso.

dstori

Tanto panel quanto frame são containers, ou seja, podem ter outros componentes adicionados a eles.
O frame é mais usado para desenhar uma janela pois ja vem com barra de título, borda e os botões de fechar, maximizar, etc.
Voce nao consegue tornar um panel visivel se nao estiver dentro de um frame

rodrigo.bossini

coloquei setvisible (true) no construtor do frame. ele fica visivel com um botão e com a progress bar.

qdo clico no botão ele aciona o codigo abaixo…

dstori

Os valores estão crescendo muito rápido, tenta com aux += 1 só que voce vê a barra preenchendo

dstori

Na verdade de um a 100 é muito pouco… Tenta com intervalos maiores.

rodrigo.bossini

agora ta assim:

Random r = new Random();
    
    jProgressBar1.setMaximum(10000000);
    int aux  = 0;
    while (aux < 10000000){
    aux += 1 + r.nextInt(5);        
        jProgressBar1.setValue(aux);    
 
    }

continua do mesmo jeito…so atualiza a progress bar depois q o loop termina…num da pra ver o progresso pouco a pouco…

dstori

Nem com um Thread.sleep(100) no loop?

rodrigo.bossini
Random r = new Random();
     
    jProgressBar1.setMaximum(10000000);
    int aux  = 0;
    while (aux < 10000000){
    aux += 1 + r.nextInt(5);        
        jProgressBar1.setValue(aux);
        try {
            Thread.sleep(100);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
 
    }

ainda não…

como seria a sugestão de reescrever o metodo paint q vc disse inicialmente? da pra colocar um trecho de codigo pra exemplificar?

rodrigo.bossini

Achei finalmente o porque do problema.

Segue: http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html#bars

Basicamente, é preciso criar uma outra thread para fazer as atualizações na tela.

Criado 25 de março de 2003
Ultima resposta 11 de set. de 2008
Respostas 18
Participantes 6