Classe para Desenhar no java

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.

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

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+

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?

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

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

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…

Tenta dar um repaint nela dentro do laço

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) ?

Desculpem, quis dizer frame e panel.

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.

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

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…

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

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

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…

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

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?

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.