Ir para conteúdo

POWERED BY:

Arquivado

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

Wanderson Regis Silva

[Resolvido] Desenhar em JFrame

Recommended Posts

Seguinte, eu preciso desenhar algumas formas geométricas numa janela, mas eu preciso que os desenhos aparecam (ou sejam apagados) quando eu ativar opções de um menu.

 

Fiz uma busca na web, mas só achei tutoriais q mostram como usar JFrame com o método paint(Graphics), mas isso me parece maio automático, e eu preciso que seja de acordo com a interação do usuário, ou teria uma maneira de fazer o desenho ser pintado na tela ao comando do usuário usando isso? E pra limpar a tela? Houve uma sugestão para usar JPanel, mas não achei nada específico sobre isso tbm.

 

Qqr ajuda será bem vinda, vlw!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim você desenha num JPanel, é seguinte, cria uma classe que estenda d JPanel e sobrescreva o método paintComponent, esse método é sempre chamado kdo um determinado component é desenhado na tela, ele recebe um Object do tipo Graphics, você pode usa-lo p desenhar várias formas, como circulos, rectangulos, poligonos e tudo mais. a primeira linha desse método deve ser uma chamada a super classe(JPanel) do mesmo, assim: super.paintComponent(aqui vai o parametro graphics), abaixo é so usar os métos do graphics p desenhar... depois disso você coloca o JPanel num frame, e se você quiser limpar por exemplo pode usar o método repaint() p poder repintar o component no container, agora a lógica será sua..

 

Se quiser dps faço um exemplo simples aqui

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por ter me guiado, em fiz o seguinte pra testar eu fiz o seguinte:

 

package paintpanel;

import java.awt.*;
import javax.swing.*;

public class Panel extends JPanel {
    public static final int OVAL = 0x01;

    private int forma = 0;

    public static void main(String[] args) {
        JFrame frame = new JFrame("Janela de Desenho");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1, 1));
        frame.setResizable(false);

        Panel panel = new Panel();
        frame.add(panel);

        frame.setSize(420, 400);
        frame.setVisible(true);

        try {
            Thread.sleep(4000);
        } catch(InterruptedException e) {
            e.printStackTrace();
        }
        panel.setForma(Panel.OVAL);
        panel.repaint();
    }

    public Panel() {
        super();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        int width = getWidth();
        int height = getHeight();

        switch(forma) {
            case OVAL:
                g.setColor(Color.RED);
                g.drawOval(25, 25, width - 50, height - 50);
                break;
        }
    }

    public void setForma(int forma) {
        this.forma = forma;
    }
}

Com isso após 4 segundos da exibição da tela, eu desenho nela. Ai no caso eu colocaria um menu com as formas a serem mostradas e faria o mesmo que oif feito no final do método main. Alguma sugestão ou está bom assim? Obrigado d qualquer forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, mas pra tornares a solução mais elegante podes aproveitar bem de OO, cada forma seria uma classe, e ela propria seria responsável por "se desenhar na tela", vou dar um ideia:

 

class Oval {
   public void desenhar(Graphics g) {
      // use o g p desenhar
   }
}

 

e no seu JPanel no paintComponent só farás os seguinte:

@Override
public void paintComponent(Graphics g) {
    // verifica qual a forma selecionada no menu
    if(oval) {
       Oval oval = new Oval();
       oval.desenhar(g);
    }
    .....
}

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.