[Ajuda] Como exibir meu JPanel?

4 respostas
InsaneChess

Pessoal, boa tarde.
Fiz o seguinte exercicio do Use a Cabeça, Java!
Pórem, não está sendo exibido desenho algum no JFrame. Não deveria exibir algo que foi desenhado na classe MyDraw?
Segue abaixo o código completo, mostrado no livro.

public class MyDraw extends JPanel {
  
	public void ComponentGraphical(Graphics G){
		G.setColor(Color.orange);
	    G.fillRect(20, 50, 100, 100);
	}
}
import javax.swing.JButton;
import javax.swing.JFrame;

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


public class Principal implements ActionListener {
    JFrame frame;
  	 
	public static void main(String[] args){
    	
	Principal Prin = new Principal();	
	Prin.Go();	
	}
	
	public void Go(){
      frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      JButton button = new JButton("Change Collor");
      button.addActionListener(this);
      
      MyDraw Draw = new MyDraw();
      
      frame.getContentPane().add(BorderLayout.SOUTH, button);
      frame.getContentPane().add(BorderLayout.CENTER, Draw);
      frame.setSize(300,300);
      frame.setVisible(true);
	}

	public void actionPerformed(ActionEvent event) {
		frame.repaint();
		
	}
	
}

4 Respostas

fabricioempresa
frame.setVisible(true);
Marky.Vasconcelos
public class MyDraw extends JPanel {   
    public void ComponentGraphical(Graphics G){   
        G.setColor(Color.orange);   
        G.fillRect(20, 50, 100, 100);   
    }   
}

Como voce vai desenhar com esse método?

Voce precisa sobreescrever paintComponent.

E lembre-se de trabalhar sobre a cópia de Graphis em um Graphics2D ao invés de pintar diretamente no que recebe como argumento.

E chame o super.paintComponent(g) para o JPanel pintar o resto da tela.

InsaneChess

Marky, obrigado pela dica!
Foi realmente um descuido enorme meu.

Para quem se interessar, segue o código correto.

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


public class MyDraw extends JPanel {
  
	public void paintComponent(Graphics G){
	    G.fillRect(0,0,this.getWidth(),this.getHeight());
	    
	    int red = (int)(Math.random()*255);
	    int green = (int)(Math.random()*255);
	    int blue = (int)(Math.random()*255);
	
	    Color randomColor = new Color(red,green,blue);
	    G.setColor(randomColor);
	    G.fillOval(70,70,100,100);
	    
	}
}

Abraços!!!

InsaneChess
Pessoal, surgiu uma dúvida. Aqui eu adiciono o meu Objeto Jpane:
frame.getContentPane().add(BorderLayout.CENTER, Draw);
Mais como foi executado o método abaixo paintComponent dele para ser criado na tela o circulo colorido? Isso é executado automaticamente por qual motivo?
public class MyDraw extends JPanel {   
     
    public void paintComponent(Graphics G){ ...
Criado 13 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 4
Participantes 3