Como fazer a linha 2D aparecer na tela?

9 respostas
S

Bom dia gente, Só estou querendo fazer a linha aparecer na tela, mas não sei como fazer… Alguém pode dar uma ajuda?

package Java2D;

import java.*;
import java.awt.Image;
import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;



public class Drawn_2D {
    
        public static Image img;
         public static Graphics2D g2;
         
    
    public static void main(String args[])
    {
       drawningALine();
        
    }
    
   
    
    
    
    
    public static void drawningALine()
    {
 
    Line2D linha = new Line2D.Double(1, 1, 1, 1);
      g2.draw(linha);
         
    }
    
    
    
    
    
}

9 Respostas

D

Normalmente, você vai estender algum componente Swing ou AWT para desenhar.

http://docs.oracle.com/javase/tutorial/2d/
http://www.guj.com.br/java/13715-tutoriais-java2d

[]'s

S

davidbuzatto:
Normalmente, você vai estender algum componente Swing ou AWT para desenhar.

http://docs.oracle.com/javase/tutorial/2d/
http://www.guj.com.br/java/13715-tutoriais-java2d

[]'s

aaaa Entao eu posso desenhar isso num jFrame ?

V
  1. Crie um JFrame;
  2. Sobrescreva o método paint do seu JFrame;
  3. Use o objeto Graphics que vem no parâmetro do método paint para desenhar.

Para desenhar na tela, tem que ter uma tela!

S

È assim? Não entendi a parte de sobrescrever!

Está dando erro : <blockquote>run:

Exception in thread “main” java.lang.NullPointerException

at Java2D.Drawn_2D.drawningALine(Drawn_2D.java:37)

at Java2D.Drawn_2D.main(Drawn_2D.java:24)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)</blockquote>
package Java2D;

import java.*;
import java.awt.Image;
import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;



public class Drawn_2D {
    
        public static Image img;
         public static Graphics2D g2;
         private static javax.swing.JFrame j;
         
    
    public static void main(String args[])
    {
       drawningALine();
        
    }
    
   
    
    
    
    
    public static void drawningALine()
    {
 
    Line2D linha = new Line2D.Double(1, 1, 1, 1);
      g2.draw(linha);
      j.paint(g2);
         
    }
   
}
V
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;


@SuppressWarnings("serial")
public class JFrameComLinha extends JFrame {
	public JFrameComLinha() {
		super("JFrame com linha");
		setSize(800,600);
		setLocationRelativeTo(null);
	}
	
	@Override
	public void paint(Graphics g) {
		Graphics2D g2d = (Graphics2D) g.create();
		g2d.drawLine(100, 100, 700, 500);
		g.dispose();
	}
	
	public static void main(String[] args) {
		JFrameComLinha janela = new JFrameComLinha();
		janela.setVisible(true);
	}
}
V

Dê uma lida nesse artigo, vai te ajudar:
http://www.pontov.com.br/site/java/47-javageral/92-conhecendo-o-jframe

S

Vlaeu Viny, eu tive que dar uma pesquisada sobre esse supress warning e override, mas acho que ja entendi!

Só falta uma coisa, essa parte aqui do código!::

@Override public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); g2d.drawLine(100, 50,50, 500); g.dispose(); }

Porque g.create(); ? Na minha concepção seria suficiente fazer assim : Graphics2D g2d = g.create();… tipo, nao entendi isso : (Graphics2D)

I

Para fazer uma cópia do objeto Graphics g original, para que sua aplicação possa usar este objeto e vc tbm sem nehum problema durante a renderização da tela.

Conversões entre tipos primitivos

Existem duas maneiras de fazer conversões de tipos:

  1. Conversão implícita, quando o tamanho de uma variável é maior que o tamanho da variável ou o valor que está sendo atribuído. Exemplo:
int y = 10;  
nbsp;  long x = y;

O tamanho de int é menor que o de long, portanto é perfeitamente aceitável.

  1. Conversão explícita, quando o tamanho de uma variável é menor que o tamanho da variável ou o valor que está sendo atribuído. Exemplo:
long y = 10L;  
nbsp;  int x = (int) y;

O tamanho de long é maior que o de int, portanto necessita indicar uma conversão. Esta indicativa é feita pelo tipo da variável, que irá receber o valor, entre parênteses: (int). Se esta informação não for colocada, ocorreria um erro de compilação indicando tipos incompatíveis. Outra forma é usar as constantes de identificação de tipos para fazer uma conversão explícita, como em: long y = 10L;

V

Esse cast existe por razões históricas. O método create() retorna um objeto do tipo Graphics, mas instancia um objeto mais poderoso, do tipo Graphics2D.

Já o create(). Você deve chama-lo para evitar alterar o objeto graphics recebido por parâmetro. É uma boa prática de programação não “sujar” o contexto gráfico. Assim, chamamos create() para obter uma cópia dele, trabalhamos com a cópia e, ao final a descartamos, deixando o objeto Graphics original inalterado.

Criado 12 de fevereiro de 2012
Ultima resposta 12 de fev. de 2012
Respostas 9
Participantes 4