Linha Grossa usando DrawLine

boas pessoal

estou o usando drawLine() pra desenhar uma linha , mas a linha do drawline() é meio fina, queria ela mais preenchida e grossa!

g.drawLine(xPosInicial, yPosInicial, xPosAnterior,
							yPosAnterior);

Você precisa efetuar o cast do seu objeto Graphics para java.awt.Graphics2D e chamar setStroke com um objeto java.awt.BasicStroke que tenha a largura desejada, antes de chamar drawLine, é óbvio.

Dica: no JDK existe um diretório “demo” que contém as fontes de um programa chamado Java2Demo. Esse programa tem todas essas técnicas (preenchimento de linhas grossas etc.), é só ler os fontes.

[quote=entanglement]Você precisa efetuar o cast do seu objeto Graphics para java.awt.Graphics2D e chamar setStroke com um objeto java.awt.BasicStroke que tenha a largura desejada, antes de chamar drawLine, é óbvio.

Dica: no JDK existe um diretório “demo” que contém as fontes de um programa chamado Java2Demo. Esse programa tem todas essas técnicas (preenchimento de linhas grossas etc.), é só ler os fontes. [/quote]

ja me eskecia do Stroke…

valeu pela dica…
é que so tava usando graphics e nao graphics2D…

valeu…beleza!

De modo geral, a primeiríssima coisa que você faz no tratamento de paint ou paintComponent é efetuar um cast para Graphics2D.

Na verdade, não só o cast, mas também a cópia:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Código de pintura aqui g2d.dispose(); }

Na verdade, não só o cast, mas também a cópia:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Código de pintura aqui g2d.dispose(); }[/quote]

nao basta apenas chamar o super?

[code]
public void paintComponent(Graphics g) {
super.paintComponent(g);

	if (existeLinha) {
		
		g.drawLine(x1, y1, x2, y2);
	
	}
}[/code]

Na verdade, não só o cast, mas também a cópia:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Código de pintura aqui g2d.dispose(); }[/quote]

nao basta apenas chamar o super?

[code]
public void paintComponent(Graphics g) {
super.paintComponent(g);

	if (existeLinha) {
		
		g.drawLine(x1, y1, x2, y2);
	
	}
}[/code][/quote]

Não basta.

Se voce não efetuar a cópia voce vai ter efeitos estranhos na sua tela. Em alguns casos voce não vai perceber, mas em alguns casos realmente vai.

A ideia de fazer uma “cópia” do objeto g (Graphics) é a seguinte: você normalmente faz algumas coisas que alteram o estado dele (como setStroke). Como é chato você desfazer tudo antes de você sair da rotina, então você faz uma cópia. Essa tal “cópia” não copia os pixels da tela, apenas algumas configurações (como, por exemplo, o Stroke). Como o Graphics é usado por todos os métodos que pintam ou desenham na tela, você sempre deve deixá-lo “do jeitinho que o encontrou”, sob pena de ter algumas coisas estranhas na tela.

A cópia e o super tem papéis diferentes.

O super serve para você chamar a pintura padrão do seu componente. No caso de um JPanel, por exemplo, ele irá apagar o conteúdo e pintar a cor de fundo do painel.

A cópia serve para o que o pessoal já explicou. :slight_smile:

falando em efeitos estranhos…ja começou a aparecer um…

valew pela dica…e já o resolvi…

esta cadeira de computaçao grafica e interfaces ainda vai dar que falar!!

:slight_smile:

ola galera me desculpe se eu tiver errado mas sou novato em Java e estou aprendendo com o professor google!!

mas estava fazendo um exercicio e consegui fazer uma linha grossa usando o DrawLine();

com loop

veja isso

public class Awt_graphics_4 extends  JPanel
{
    public void paintComponent( Graphics g)
    {
  
        int width   = getWidth();
        int height  = getHeight();

        //variaeis para o laço   
        int x=0;
        int y=0;

          super.paintComponent(g);
         int pulaLinha=0;

        while(pulaLinha<=240)
        {
       
         g.drawLine(height,x,y,width);
     
        
        pulaLinha=pulaLinha+20;
         x=x+1;
         y= y+1;
        
         }     
        }
     public static void main(String[]sagrs)
    {
        //isntancia da minha classe
        Awt_graphics_4 Panel = new Awt_graphics_4();

        //cria um frame
        JFrame aplicaçao = new JFrame();

        //caracteristicas do JFrame
        aplicaçao.setDefaultCloseOperation(aplicaçao.EXIT_ON_CLOSE);
        aplicaçao.add(Panel);
        aplicaçao.setSize(250, 250);
        aplicaçao.setTitle("Desenhando X");
        aplicaçao.setVisible(true);
     }
}

Acho que o jeito mais fácil é configurar a caneta:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setStroke(new BasicStroke(4.0)); //4 pixels de largura g2d.drawLine(0,0,200,200); g2d.dispose(); }

Dá uma lida: Ponto V! - Pintando no Java 2D