Desenhando Linhas

Como é o eixo de coordenadas em programação Java
Vamos começar esta seção de programação gráfica com um conceito muito importante: as coordenadas da tela.

A origem é no canto superior esquerdo da tela.
O eixo x (horizontal) começa na esquerda e cresce em direção a direita.
O eixo y (vertical) começa de cima e cresce para baixo.


Desenhando Linhas em Java

Caso você não se lembre bem de suas aulas de geometria, para definir uma linha precisamos apenas de dois pontos. Ou seja, definindo dois pontos, temos automaticamente uma linha.

Para desenhar uma linha em Java, as coisas serão levemente diferentes.
Iremos fornecer um ponto, que é o ponto de origem, ou seja, dois números: primeiro o do eixo x, depois o número do eixo y.
Guarde bem essa ordem, ela é universal: primeiro a largura (eixo horizontal x), depois a altura (eixo vertical y).

Depois, vamos fornecer mais dois números: a largura e a altura.
Vamos usar esses nomes em inglês: width e height.

Pronto, para desenhar uma linha em Java devemos fornecer 4 números: dois números que caracterizam a origem da linha, e dois que vão dizer até onde ela 'vai', que é o width e height.

O método que vamos usar é o drawLine, que recebe 4 argumentos, que são os 4 números para criar a linha.
Esse método se encontra na classe Graphics, da package awt. Logo, temos que importar tal classe:
import java.awt.Graphics;

Para mais informações dessa importante classe, acesse a documentação:
http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics.html



Exemplo de código: Desenhando uma linha em Java

Criando o JPanel

Primeiro de tudo, vamos criar nosso panel. Ele será uma classe chamada DrawLines.
Para ser um JPanel basta fazer um extends nessa classe DrawLines.

Como vamos fazer um desenho, usaremos sempre um método chamado paintComponent, que recebe um objeto do tipo Graphics. Costuma se chamar esse objeto de 'g', e é ele que realmente fará os desenhos, através de seus métodos.
Antes, disso porém, precisamos invocar um método da superclasse e passar o objeto que vamos usar para fazer os desenhos, no caso é o objeto 'g', para tal basta fazer isso:
super.paintComponent(g);

Agora, vamos de fato, desenhar a bendita linha.
Para fazer isso, usamos o método drawLine, que é um nome bem sugestivo e óbvio, se você sabe inglês.
Como já dissemos, é um método que vai receber 4 números. Os dois primeiros são o ponto de origem e os dois últimos o fim da linha.

Criando o JFrame

De panel criado, vamos criar o frame. Vamos fazer isso na classe principal.
Vamos criar um objeto de nome frame, e passar uma string para o construtor.
Esse string ("Desenhando Linhas - Curso Java Progressivo") ficará no título, veja:


Vamos definir algumas coisas em nosso frame:


  •         frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) : define o que acontece no frame quando tentamos fechar (o frame se encerra)
  •         frame.setSize( 250, 250 ) : define o tamanho do frame, 250 de largura por 250 de altura
  •         frame.setVisible( true ) : define se o frame será, naquele instante, visível
  •         frame.add( panel ) : finalmente vamos adicionar nesse frame o panel que criamos

Por fim, nosso código que cria uma linha que sai da origem do frame até o ponto (250,250) é:


-->Lines.java
import javax.swing.JFrame;

public class Lines {

    public static void main(String[] args) {
       DrawLines panel = new DrawLines();

       JFrame frame= new JFrame("Desenhando Linhas - Curso Java Progressivo");

        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setSize( 250, 250 );
        frame.setVisible( true );
        frame.add( panel );

        }
}


-->DrawLines.java
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawLines extends JPanel{
    
    public void paintComponent( Graphics g ){
    super.paintComponent( g );
        
    g.drawLine( 0, 0, 250, 250 );

    }
}

7 comentários:

Marco Sousa disse...

Boa noite.
Sua publicação é excelente para aprendizado.

Uma pergunta: Como referencio o elemento desenhado para trocar sua cor, por exemplo?

g.drawLine(int, int, int, int)
Se eu precisar alterar as medidas da linha acima, ou até mesmo deletar esse elemento sem afetar outros, consigo?

Obrigado.

Anônimo disse...

como insiro o metodo drawlines no lines

Yago Godêz disse...

Muito boa sua publicação. Estou fazendo um projeto e sou iniciante em Java, quero representar uma malha formada por vetores e gostaria de saber uma maneira de fazê-lo.
Se puder responder meu comentário, ficarei agradecido.

Paulo Henrique disse...

Quando copilei pela primeira vez não apareceu a linha. Mesmo copiando exatamente conforme o exemplo.

NetBeans orientou em adicionar @Override na classe DrawLines, sendo assim quando rodei novamente apareceu as linhas.

antonio silva disse...

boa tarde,
como desenho linhas sem usar a biblioteca Graphics?

Rodrigo Appendino disse...

Bom artigo, mas falta explicar PORQUE fazemos isso.
Por que criamos um método paintComponent? Por que chamamos o método paintComponent da superclasse abstrata?
Não daria pra fazer algo do tipo panel.add(g)?

andersoney (ney) disse...

Não existe metodo similar que lida com todo o processo em coordenadas polares? acredito que seria mais "simples".

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.