problem z mouseDown

0

//gra Catch the rain

import javax.swing.;
import javax.imageio.
;
import java.io.*;

import javax.imageio.;
import java.awt.event.
;
import java.awt.;
import javax.swing.
;

public class Gra2 extends Frame {

//static MouseEvent eM = null;

//public void addListener(TypeListener el)

static Label czas = new Label();
static Label punkty = new Label();

private Image img;

int iloscel=7;
static int iloscpkt=0;
static int iloscczasu=200;

Kropelka[] kr = new Kropelka[iloscel];
Thread [] t=new Thread[iloscel];

public Gra2 (String nazwa)throws IOException {

//addMouseListener(this);

for (int i=0;i<iloscel;i++) {
kr[i] = new Kropelka ((int)(Math.random()50+10),i);
kr[i].czo=i
2000;
//kr[i].addActionListener(new B1());
//kr[i].addActionListener(new Sluchacz());
}

    //super ("Gra"); 
    setResizable(false);
	setSize(800,600); 
	setLocation(100,100);
	//setIgnoreRepaint(true);
	
	File sourceimage = new File(nazwa);
    img = ImageIO.read(sourceimage);
	};
	
	
	public void paint (Graphics g)
	{
	//draw the image
	if( img != null)
		g.drawImage(img,0,0, this);
		g.translate(0,25);
		
		
		for (int i=0;i<iloscel;i++) {
		t[i] = new Thread(kr[i]);
		}
		
		
		for (int i=0;i<iloscel;i++){
			t[i].start();
        }
        
        for (int i=0;i<iloscel;i++){
        
        kr[i].spada(g);
        }
        
		try
  {
    Thread.sleep(100);        
         
        }catch (InterruptedException ie)
        {
    System.out.println(ie.getMessage());
        };
        
        //reapint do poprawienia
		repaint(1,0,0,800,600);
		//invalidate();
	
		
		}

public static void main (String [] args) throws IOException
{

    Frame gra = new Gra2 ("pn.jpg");
    gra.setLayout(null);

    Zegar zgr = new Zegar();
    zgr.start();
    
   
    //tu ustawiam kolor czcionki
    czas.setForeground(Color.yellow);
    
    
    punkty.setText(""+iloscpkt);
    punkty.setBackground(Color.orange);
    czas.setBackground(Color.orange);
    // punkty.setVerticalTextPosition(JLabel.BOTTOM);
	//punkty.setHorizontalTextPosition(JLabel.CENTER);

    Font f =new Font("sansserif", Font.BOLD, 30);
    //f.setColor(Color.blue);
    //setColor(Color.blue);
    //f.setColor(Color.black);

    punkty.setFont(f);
    czas.setFont(f);
    
    
    czas.setBounds(700,50,80,40);
    punkty.setBounds(10,50,100,40);
    punkty.setVisible(true);
    czas.setVisible(true);   
    gra.add(punkty);
    gra.add(czas);

     gra.addWindowListener(new WindowAdapter(){ 
     public void windowClosing(WindowEvent e){ 
     System.out.println("Dziekujemy za prace z programem..."); 
     System.exit(0); 
      } 
    }); 
    gra.setVisible(true);   
}

public boolean mouseDown(Event e, int xm, int ym ) {

   punkty.setBackground(Color.green);
   return true;

}

}

class Zegar extends Thread {

public void run() {

for (; Gra2.iloscczasu > 0; Gra2.iloscczasu--)
{
Gra2.czas.setText(Gra2.iloscczasu/60+":"+Gra2.iloscczasu%60);
try
{
Thread.sleep(1000);

        }catch (InterruptedException ie)
        {
    System.out.println(ie.getMessage());
        };
    }

}
}

class Kropelka extends JPanel implements Runnable //,ActionListener
{
// setIgnorerepaint(true);
int rozmiar;
int numer;
// public static int korx;
boolean widoczna,niezaznaczona=true;
int y=60;
int x=(int)(Math.random()*600)+100;
//int xk=x+rozmiar;
int ilpk;
int czo;
boolean ustaw=false;

public boolean mouseDown(Event e, int xm, int ym ) {

   ustaw=true;
   return true;

}

public Kropelka(int rozmiar,int numer){
super();
this.rozmiar=rozmiar;
this.numer=numer;
ilpk=(100-rozmiar)/2;
}
	
public void spada (Graphics g) {

 if(niezaznaczona){
 if(widoczna) {
 if(y<399) {			
 if (ustaw){
 g.setColor(Color.blue);
 }
 g.fillOval (x,y,rozmiar,rozmiar);
 //g.addActionListener(new Sluch(numer));
 if (widoczna) y++;
 }
 }
 }
 };
	
public void run () {
	 

// int x;

try
{
Thread.sleep(czo);

        }catch (InterruptedException ie)
        {
    System.out.println(ie.getMessage());
        };
widoczna=true;
  
 }       

}

Dla tego kodu chciałem, aby kliknięcie w czarną kropkę zmieniało ją na niebeską. Ktoś wie, jak to zrobić?

0

Musisz tego mouse listenera'a dodać czyli tam gdzie masz:

//addMouseListener(this)

Powinno być coś w stylu:

addMouseListener(new MouseAdapter() {
 public void mousePressed(MouseEvent e) {
  //tutaj sprawdzasz czy trafiles w kropke
  //jesli tak to cos z ta kropka robisz w stylu:
  for(int i = 0; i < iloscel; i++)
   if(kr[i].trafiona(e.getX(), e.getY())
    kr[i].zdychaj()
 }
}

Niemniej jednak tworzenie i uruchamianie wątków w metodzie paint to złe założenie
Wpisz sobie w google: java swing game i zobacz sobie przykłady
np ten: http://zetcode.com/tutorials/javagamestutorial

1 użytkowników online, w tym zalogowanych: 0, gości: 1