Ir ao conteúdo

Desenhando figuras a partir de coordenadas


Plateu

Posts recomendados

  • Membro VIP
Postado

Boa tarde,pessoal, td bem? Como sabem, sou o moderador da área de C/C++ e até então nunca tinha trabalhado com a linguagem Java. Parece ser bem enxuta e reduz muito o trabalho do programador. Vamos que enteressa.

Tenho um projeto da faculdade no qual preciso, a partir do tipo da figura geometrica(circulo, triangulo...), cor e coordenadas X/Y, desenha-las na tela. Em C++, eu usaria uma classe com os métodos de Draw na interface(semelhante ao que temos com a OpenGL). Me falaram que no Java isso é muito mais fácil de ser executado. Dei uma pescada no google e achei coisas de uma tal de Canvas e de uma outra tal de Graphics. Ja fiz o que foi pedido em console(essa parte é considerada ponto extra) e estou passando td para Panel. Se alguem puder me orientar quanto a isso,ficaria agradescido. Caso tenham dúvidas em C++, é só pular la na área de C/C++ de nosso forum.

Abraços,

Pedro Rosa.

  • Membro VIP
Postado

Opa Plateu, como prometido dei um olhada nesse assunto e já sei como fazer o que você quer.^_^

Dê uma olhada no seguinte código(que eu fiz rapidinho aqui, então perdoem qualquer falha no que diz respeito a alguns aspectos da qualidade de código):


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

class ThreadDesenhos extends Thread{

private Graphics graphics;
String tipoDesenho;

public ThreadDesenhos(JFrame frame){

this.graphics = frame.getGraphics();
this.graphics.setColor(Color.red);
this.tipoDesenho = "circunferencia";

}

private void desenharCircunferencia(int x, int y, int raio){

graphics.fillOval(x, y, raio, raio);

}

private void desenharQuadrado(int x, int y, int lado){

graphics.fillRect(x, y, lado, lado);

}

private void limpar(){

graphics.clearRect(0, 0, 300, 200);

}

public void MudarTipo(){

limpar();
tipoDesenho = tipoDesenho.equals("circunferencia")?"quadrado":"circunferencia";

}

public void run(){

while(true){

if(tipoDesenho.equals("circunferencia"))
desenharCircunferencia(100, 75, 100);
if(tipoDesenho.equals("quadrado"))
desenharQuadrado(100, 75, 100);

}

}

}

public class JanelaDesenho{

ThreadDesenhos threadDesenhos;
Button button;

public JanelaDesenho() {

JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(300, 200);
panel.setSize(300, 200);
frame.setVisible(true);
frame.add(panel);

this.button = new Button("Mudar desenho");
panel.add(button);

this.threadDesenhos = new ThreadDesenhos(frame);
this.threadDesenhos.start();

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

threadDesenhos.MudarTipo();

}
});

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new JanelaDesenho();

}

}
import java.awt.*;

Bem, a princípio eu vi que existem duas formas, uma delas é sobrecarregar o método paint de um JPanel(ou de uma classe que estenderia JPanel) e colocar lá dentro o que você quer que seja desenhado.

A outra forma, que foi a que implementei no exemplo acima, consiste em deixar uma thread fazendo o mesmo desenho no frame(se você apenas mandar desenhar uma vez, o desenho "desaparecerá" rapidamente, por isso é necessário deixar a thread desenhando).

Para desenhar foi necessário obter do frame que será desenhado um objeto da classe Graphics(é importante que o frame já esteja pronto para ser exibido, ou seja, que este já esteja inserido em algum container, se você tentar obter o Graphics de um frame que ainda não é "exibível" o valor retornado será null).

Uma vez que você tem o Graphics, basta deixar o desenho em loop e a cada transição entre dois desenhos dê uma limpada na tela.

Graphics oferece diversas formas de desenho, desde linhas até polígonos, então basta usar os métodos certos e você conseguirá desenhar aquilo que deseja.

Espero ter ajudado e se alguém tiver alguma crítica/sugestão/ridicularização-de-alguma-grande-gambiarra-do-meu-código fique à vontade para dizer, eu também sou novato nessa parte de desenho e consegui fazer esse programinha juntando umas informações daqui com outras dali, então alguém mais experiente com certeza saberá a melhor forma de lidar com essas classes.

Qualquer dúvida é só dizer que eu tentarei tirar na medida do possível.:D

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!