Desenhar uma forma no java com paintComponent(Graphics g)

13 respostas
E

Bom dia galera, estou estudando o livro use a cabeça java e cheguei na parte de interface grafica porem logo no segundo exemplo os programa não funciona. Sera que alguem poderia me dizer o que esta errado. Desde ja agradeço:

import javax.swing.<em>;

import java.awt.BorderLayout;

import java.awt.event.</em>;
public class SimpleGui1B implements ActionListener{

JButton button;

/**
  • @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    SimpleGui1B gui = new SimpleGui1B();
    gui.go();
    }
public void go(){

JFrame frame = new JFrame();

button = new JButton(click me);

button.addActionListener(this);

MyDrawPanel panel = new MyDrawPanel();
frame.getContentPane().add(BorderLayout.NORTH, panel);

frame.getContentPane().add(BorderLayout.SOUTH, button);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(300, 300);

frame.setVisible(true);
}

public void actionPerformed(ActionEvent event){

button.setText(“I’ve bee clicke”);

}

}

import javax.swing.<em>;

import java.awt.</em>;

public class MyDrawPanel extends JPanel{

public void paintComponent(Graphics g){
///super.paintComponent(g);

setBackground(Color.black);

g.setColor(Color.blue);

g.fillRect(10, 10, 100, 100);
g.fillOval(70, 70, 100, 100);*/

}

}

13 Respostas

V

Por favor, use a tag code:
http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

E também diga o que não funciona. O programa nem compila? Ou não faz o que você esperava?
Outra coisa. Por que você comentou a linha do super?

V

Uma coisa. Troque a posição do painel de NORTH para CENTER. Como seu painel não tem preferredSize definido, ele pode estar ficando muito pequeno.

E

Cara valeu da proxima vez vou colocar o cod. neste link.Cara ele compila mas não funciona não aparece o desenho, eu comente o super por que na verdade no livro nem fale dele eu vi no forum mais como tb não funcionou eu comentei ele.
Se puder de ajudar cara agradeço!!

M

Coloca uma borda no seu JPanel, rode e veja se ele tem espaço suficiente para desenhar.

E

Obrigadão galera agora funciou!!!

K

Certo! Isso desenha um círculo azul no fundo preto...
Mas a finalidade desse código é fazer com que o círculo mude de cor quando o usuário clica no botão.

Seguem os códigos:

package capitulo12;

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

public class MyDrawPanel extends JPanel{

	public void paintComponentes(Graphics g){
	
		Graphics2D g2d = (Graphics2D) g;
		
		
		int red = (int) (Math.random()*255);
		int green = (int) (Math.random()*255);
		int blue = (int) (Math.random()*255);
		
		Color startColor = new Color(red, green, blue);
		
		red = (int) (Math.random()*255);
		green = (int) (Math.random()*255);
		blue = (int) (Math.random()*255);
		
		Color endColor = new Color(red, green, blue);
		
		GradientPaint gradient = new GradientPaint(70, 70, startColor, 150, 150, endColor);
		g2d.setPaint(gradient);
		g2d.fillOval(70, 70, 100, 100);
		
		}
}
package capitulo12;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SimpleGui3C implements ActionListener{

	JFrame frame;

	public static void main(String[] args) {
		SimpleGui3C gui = new SimpleGui3C();
		gui.go();
	}
	
	public void go(){
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton button = new JButton("Change Colors");
		button.addActionListener(this);
		
		MyDrawPanel drawPanel = new MyDrawPanel();
		
		frame.getContentPane().add(BorderLayout.SOUTH, button);
		frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
		
		frame.setSize(300,300);
		frame.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		frame.repaint();
	}

}

O que acontece é que o código está sem erros e compila. Só que só aparece o frame com o botão, nada do círculo. O que tem de errado?

K

Ahhhh! Erro de digitação!
Obrigada!

Engraçado que estou usando o Eclipse e esse erro não foi indicado…

M

Ele nao vai saber que voce errou, para ele é apenas um método novo.

Se voce colocasse @Override nele, ai sim ele avisaria que nao existe um método com esse nome na super class.

K

É verdade! Testei aqui e deu certo!
Vou usar @Override sempre agora.

Obrigada! =)

R

Pessoal, também sou iniciante na área de Java e a minha dúvida é: Eu usei este método paintComponent, porém para iniciar o java é necessário “public static void main(String[] args)”. Como procedo diante disso? Coloco mesmo a linha citada ou escreve só o método?

Obrigado desde já.

R
Pessoal, consegui resolver o problema vendo alguma dicas na internet, obrigado!
import java.awt.*;
import javax.swing.*;

public class MyDrawPanel extends JPanel{

	public static void main(String[] args){		
		MyDrawPanel drawPanel = new MyDrawPanel();
		JFrame frame = new JFrame();
		
		frame.getContentPane().add(drawPanel);
		frame.setSize(300,300);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public void paintComponent(Graphics g){
		g.setColor(Color.orange);
		g.fillRect(20, 50, 100, 100);		
	}

}
W
Enadrov:
Bom dia galera, estou estudando o livro use a cabeça java e cheguei na parte de interface grafica porem logo no segundo exemplo os programa não funciona. Sera que alguem poderia me dizer o que esta errado. Desde ja agradeço:

Você pode editar tua mensagem e colocar o código dentro da tag code ;)

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

public class MyDrawPanel extends JPanel {

    public void paintComponent(Graphics g) {

        super.paintComponent(g); //Para o fundo ficar black, tem que colocar isto aqui senão não vai
        setBackground(Color.black);
        
        g.setColor(Color.blue);
        g.fillRect(10, 10, 100, 100);

        g.fillOval(70, 70, 100, 100);
        
    }
}
O ViniGodoy já indicou tua correção para o retangulo e oval.
W

KamillaaaH:
Certo! Isso desenha um círculo azul no fundo preto…
Mas a finalidade desse código é fazer com que o círculo mude de cor quando o usuário clica no botão.

O que acontece é que o código está sem erros e compila. Só que só aparece o frame com o botão, nada do círculo. O que tem de errado?


Começa que o nome do método está errado: paintComponentes

A API fornece dois métodos: paintComponents e paintComponent.
Eu testei com o paintComponent e funcionou.

Criado 29 de julho de 2011
Ultima resposta 4 de ago. de 2011
Respostas 13
Participantes 6