Thread em um JPanel

3 respostas
B

Estou com algumas duvidas sobre threads em um JPanel.
A duvida é o seguinte, eu tinha um programa principal que se utilizava de threads para desenhar uma figura em um painel.
Porem, tive que alterar esse mesmo programa principal para trabalhar como um JPanel, mas ao fazer isso eu não consigo fazer ele funcionar, pois ao adicioná-lo no novo programa principal ele não aparece.
O que devo fazer para ele aparecer?

Valeu.

3 Respostas

B

bom kara… assim num dá pra ajudar muito naum… posta o code aki pra dar uma luzinha…

e naum esqueca que compomentes swing quando acessados por multiplas threads naum funcionam corretamente…

B

1ª classe

import java.awt.<em>;

import javax.swing.</em>;

import java.awt.geom.*;
public class PainelPintura extends JPanel {

private int escolha=0;

private int rotacao=0;
public void paint (Graphics g)
{

int x[] = { 192, 208, 208, 204, 204, 196, 196, 192}; //Desenhar os lugares para as bobinas

int y[] = { 115, 115, 131, 131, 141, 141, 131, 131}; //idem

int k[] = { 170, 230 };

int p[] = { 192, 202, 202, 192 }; //Desenhar as ranhuras do rotor

int l[] = { 150, 150, 160, 160 }; //idem

int p1[] = { 120, 100, 80, 80, 135, 155 }; //Desenhar os pés

int p2[] = { 245, 295, 295, 315, 315, 270 }; //idem	

int p3[] = { 280, 300, 320, 320, 265, 245 }; //idem

int bo1X[] = { 196, 204, 204, 196 }; //Desenha as bobinas

int bo1Y[] = { 119, 119, 127, 127 }; //idem
Graphics2D g2d = ( Graphics2D) g;
	
    if(escolha == 0){
                //Desenhar o fundo
g2d.setPaint(Color.blue);
g2d.fill(new Ellipse2D.Double(100,100,200,200));
	
//Desenhar o espaço para o rotor
g2d.setPaint(Color.white);
g2d.fill(new Ellipse2D.Double(140,140,120,120));
	
      //Desenha os lugares para as bobinas, mas não imprime na tela.
GeneralPath bob = new GeneralPath();
bob.moveTo(x[0], y[0]);
for ( int i = 1; i &lt; x.length; i++ )
	bob.lineTo( x[i], y[i] );
bob.closePath();
for (int i = 0; i &lt; 6; i++)
{
    g2d.setPaint(Color.white);
    g2d.fill(bob);
    g2d.rotate(Math.PI/3.0 , 200, 200); 
}

               //Desenhar os pés do motor
g2d.setPaint(Color.blue);
GeneralPath pe1 = new GeneralPath();
pe1.moveTo( p1[0], p2[0] );
for (int i = 1; i&lt;p1.length; i++)
	pe1.lineTo( p1[i], p2[i] );
pe1.closePath();
g2d.fill(pe1);
GeneralPath pe2 = new GeneralPath();
pe2.moveTo( p3[0], p2[0] );
for (int i = 1; i&lt;p3.length; i++)
	pe2.lineTo( p3[i], p2[i] );
pe2.closePath();
g2d.fill(pe2);
	
//Desenhar o rotor
g2d.setPaint(Color.red);
g2d.fill(new Ellipse2D.Double(150,150,100,100));
g2d.setPaint(Color.blue);
g2d.fill(new Ellipse2D.Double(192,192,16,16)); 
}
else 
{	
        if(escolha == 1)
                        {
	//Desenha as ranhuras do rotor
	GeneralPath rotor = new GeneralPath();
	rotor.moveTo( p[0],l[0] );
	for (int i = 1; i&lt;p.length; i++)
	                   rotor.lineTo( p[i], l[i] );
	rotor.closePath();
			
              for (int f = 0; f &lt; rotacao; f++) //Para "apagar" o que já foi desenhado 
             {
	for (int w = 0; w &lt; 9; w++)
	{
	       g2d.setPaint(Color.red);
	       g2d.fill(rotor);
	       g2d.rotate(Math.PI/4.0 , 200, 200);
	}
	g2d.rotate(Math.PI/3.0, 200, 200); 
             }	
            for (int i = 0; i &lt; 9; i++) //Desenhar as ranhuras do rotor
           {
	g2d.setPaint(Color.white);
	g2d.fill(rotor);
	g2d.rotate(Math.PI/4.0 , 200, 200);
           }
			
}
else
{
       if(escolha == 2)
       {
	//Desenha os condutores
	GeneralPath bob1 = new GeneralPath();
	bob1.moveTo( bo1X[0], bo1Y[0] );
	for (int i = 1; i&lt;bo1X.length; i++)
		bob1.lineTo( bo1X[i], bo1Y[i] );
	bob1.closePath();
		
	//imprimir na tela as bobinas
	for(int t = 0; t &lt; rotacao; t++) //"Apagar" as bobinas da tela
	{
 	      for(int branco = 0; branco&lt;6; branco++)
	      {
	           g2d.setPaint(Color.white);
	           g2d.fill(bob1);
	           g2d.rotate(Math.PI/3.0, 200, 200);
	       }
	g2d.rotate(Math.PI/3.0, 200, 200);
	}
	for(int j = 0; j&lt;3; j++) //imprimir a primeira metade das bobinas
	{
	        g2d.setPaint(Color.red);
	        g2d.fill(bob1);
	        g2d.rotate(Math.PI/3.0 ,200, 200);
	}
	for(int m = 0; m&lt;3; m++) //imprimir a segunda metade das bobinas
	{
	        g2d.draw(bob1);
	        g2d.rotate(Math.PI/3.0 ,200 ,200);
	}
				
				
          }
                     }
             }
         }

public void draw (int po, int rotac)
{
	escolha = po;
	rotacao = rotac;
	repaint();
	
}

}

2ª classe…

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.<em>;

import java.awt.geom.</em>;

public class Teste2D extends JPanel{

private PainelPintura pint = new PainelPintura();
private int rot1=0, rot2=0;


public Teste2D()
{
		
	pint.draw(0,0);
	
	add(pint);
	
	Condutor cond = new Condutor();
	Rotor rot = new Rotor();
	cond.start();
	rot.start();
	
		
}

class Condutor extends Thread {

	public Condutor()
	{}
	public void run()
	{
	   for(int ll=0; ll&lt;120; ll++) {
	   try{
	         pint.draw(2, rot2);
	         Thread.sleep(100);
	         rot2++;
	   }
	   catch(Exception tu){} }
	}	}

class Rotor extends Thread {
	public Rotor()
	{
	}
	public void run()
	{
	         for( int kk=0; kk&lt;30; kk++){
	         try{
	              pint.draw(0,0);
	              pint.draw(1, rot1);
	              Thread.sleep(300);
	              rot1++;
	         }
	         catch(Exception e){} }
	}	}

}

3ª classe

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.<em>;

import java.awt.geom.</em>;
public class PainelMotor extends JFrame

{

private Teste2D Motor2D = new Teste2D();

private JButton b = new JButton(Teste);

private Container c = getContentPane();

private JPanel p = new JPanel(new BorderLayout());
public PainelMotor()
{
	super("TesteDePainel");
	p.add(b, BorderLayout.NORTH);
	p.add(Motor2D);
	c.add(p);
	setSize(500,500);
	show();
}

public static void main( String args[] ) {
         PainelMotor a = new PainelMotor();
         a.addWindowListener(
         new WindowAdapter() {
                public void windowClosing( WindowEvent e ) {
 		System.exit( 0 );
			}
		}
	);
}

}

B

Agora o problema é ler esse código todo embolado… :lol:

Criado 18 de novembro de 2004
Ultima resposta 28 de nov. de 2004
Respostas 3
Participantes 2