Desenhando linhas usando o WHILE

5 respostas
T

Bom… estou iniciando o estudo de Java, e começei pelo livro da Deitel - Como Programar Java vol.8.
Aproveito e deixo a ideia de criar um topico somente p/ duvidas deste livro… creio que tem mais gente estudando o mesmo.

bora lá… a duvida é referente ao cap.4 … DRAWLINES

g.drawLine(x, y, largura, altura);
g.drawLine(x, altura, largura, y); //AMBOS JUNTOS DESENHAM UM X NO JFrame…


duvida:
como faço(quais a instruções) devo usa para manipular as linhas e formar desenhos variados utilizando o while…a um maximo de 20 linhas por exemplo

5 Respostas

explosive_spirit

TMichelini:
Bom… estou iniciando o estudo de Java, e começei pelo livro da Deitel - Como Programar Java vol.8.
Aproveito e deixo a ideia de criar um topico somente p/ duvidas deste livro… creio que tem mais gente estudando o mesmo.

bora lá… a duvida é referente ao cap.4 … DRAWLINES

g.drawLine(x, y, largura, altura);
g.drawLine(x, altura, largura, y); //AMBOS JUNTOS DESENHAM UM X NO JFrame…


duvida:
como faço(quais a instruções) devo usa para manipular as linhas e formar desenhos variados utilizando o while…a um maximo de 20 linhas por exemplo

Você precisará conhecer outros métodos da classe Graphics como drawRect (retangulo), drawCircle (círculo), etc, essas são comentadas em outros capítulos do livro.

A partir do momento que você conhecer mais alguns métodos, as formas para desenhá-los podem basear-se em laços (for e while por exemplo) usando a posição atual do índice para informar aos métodos em qual ponto do plano cartesiano ele irá desenhar o que foi pedido.

O livro também aborda esse exemplo, só não lembro em qual capítulo.

T

Ok…

Continuarei o livro então…

Obrigado

ViniGodoy
Dá para desenhar coisas muito legais usando só linhas e um while:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

public class LinesSample extends JFrame {
    private double angulo = 0;
    private double raio = 10;
    private int lados = 3;
    private boolean star = false;
    private BufferStrategy bs;

    public LinesSample() {
        setTitle("Linhas");
        setSize(800, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyChar() == '3') lados = 3;
                if (e.getKeyChar() == '4') lados = 4;
                if (e.getKeyChar() == '5') lados = 5;
                if (e.getKeyChar() == '6') lados = 6;
                if (e.getKeyChar() == '7') lados = 7;
                if (e.getKeyChar() == '8') lados = 8;
                if (e.getKeyChar() == '9') lados = 9;
                if (e.getKeyChar() == '0') lados = 100;
                if (e.getKeyChar() == '+' && raio < 200)
                    raio += 5;
                if (e.getKeyChar() == '-' && raio > 5)
                    raio -= 5;
                if (e.getKeyChar() == ' ') 
                    star = !star;
            }
        });

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                createBufferStrategy(2);
                bs = getBufferStrategy();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            angulo += 0.03;
                            pintarLinhas();
                            try {
                                Thread.sleep(50 / 3);
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                }).start();
            }
        });
    }

    public void pintarLinhas() {
        if (bs == null || bs.contentsLost())
            return;

        double fatia = 2 * Math.PI / lados;
        Graphics2D g2d = (Graphics2D) bs.getDrawGraphics();
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, 800, 600);

        g2d.setColor(Color.BLACK);
        for (int i = 0; i < lados; i++) {
            int x1 = (int) (Math.cos(i * fatia + angulo) * raio) + 400;
            int y1 = (int) (Math.sin(i * fatia + angulo) * raio) + 300;
            int x2 = (int) (Math.cos((i + (star ? 2 : 1)) * fatia + angulo) * raio) + 400;
            int y2 = (int) (Math.sin((i + (star ? 2 : 1)) * fatia + angulo) * raio) + 300;
            g2d.drawLine(x1, y1, x2, y2);
        }
        bs.show();
    }

    public static void main(String[] args) {
        new LinesSample().setVisible(true);
    }
}

Experimente apertar os números de 3 até 9, as teclas + e - e a tecla de espaço.

ViniGodoy
Aqui vai outro exemplo legal:
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.util.Random;

import javax.swing.JFrame;

public class Sierpinski extends JFrame {
    private Point p[] = { new Point(400, 50), new Point(10, 550), new Point(750, 550) };
    private Point last = p[0];

    private Random random = new Random();

    private BufferStrategy bs;

    public Sierpinski() {
        setTitle("Sierpinski");
        setSize(800, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                createBufferStrategy(2);
                bs = getBufferStrategy();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            pintar();
                            try {
                                Thread.sleep(4);
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                }).start();
            }
        });
    }

    public void pintar() {
        if (bs == null || bs.contentsLost())
            return;

        Graphics g = bs.getDrawGraphics();
        int r = random.nextInt(3);
        last = new Point((last.x + p[r].x) / 2, (last.y + p[r].y) / 2);
        g.drawLine(last.x, last.y, last.x + 1, last.y + 1);
        bs.show();
    }

    public static void main(String[] args) {
        new Sierpinski().setVisible(true);
    }
}
ViniGodoy

:slight_smile:

Criado 6 de setembro de 2013
Ultima resposta 12 de set. de 2013
Respostas 5
Participantes 3