Diskuze: MouseListener

Java Java MouseListener

Avatar
sphex
Člen
Avatar
sphex:

viete mi poradiť ako napísať alebo upraviť kod aby mi mouselistener fungoval iba na jednu kartu ktora je na obrazku a nie na všetky naraz? Na kliknutie mam nastavene aby mi vypisalo zoznam kariet ktore vidim ale chcem aby to fungovalo iba na strednej karte

public void hrac1ZautocNaKatu(int i,int j){
    if(this.hrac1.getJeNaTahu()==true){
        if(this.stol1.dajKartuCislo(i).jePouzita() == false){
            this.stol1.dajKartuCislo(i).zautocNaKartu(this.stol2.dajKartuCislo(j));
            this.stol1.dajKartuCislo(i).pouzita();
        }
    }
    this.stol1.vymazZnicenuKartu();
    this.stol2.vymazZnicenuKartu();
}

public void hrac2ZautocNaKatu(int i,int j){
    if(this.hrac2.getJeNaTahu()==true){
        if(this.stol2.dajKartuCislo(i).jePouzita() == false){
            this.stol2.dajKartuCislo(i).zautocNaKartu(this.stol1.dajKartuCislo(j));
            this.stol2.dajKartuCislo(i).pouzita();
        }
    }
    this.stol1.vymazZnicenuKartu();
    this.stol2.vymazZnicenuKartu();
}

public void hrac1ZautocNaPostavu(int i){
    if(this.hrac1.getJeNaTahu()==true){
        if(this.stol1.dajKartuCislo(i).jePouzita() == false){
            this.stol1.dajKartuCislo(i).zautocNaPostavu(hrac2);
            this.stol1.dajKartuCislo(i).pouzita();
        }
    }
}

public void hrac2ZautocNaPostavu(int i){
    if(this.hrac2.getJeNaTahu()==true){
        if(this.stol2.dajKartuCislo(i).jePouzita() == false){
            this.stol2.dajKartuCislo(i).zautocNaPostavu(hrac1);
            this.stol2.dajKartuCislo(i).pouzita();
        }
    }
}

public void refresh(){
    this.paintComponent();
}

public void paintComponent(){
    try{
    String meno0 = this.stol1.dajKartuZRukyCislo(0).getMeno();
    this.k0 = new ObrazkyKariet(720,700,stol1,0,hrac1);
    frame.add(k0);
    k0.addMouseListener(k0);
    frame.revalidate();


    String meno1 = this.stol1.dajKartuZRukyCislo(1).getMeno();
    this.k1 = new ObrazkyKariet(580,700,stol1,1,hrac1);
    frame.add(k1);
    //frame.addMouseListener(k1);
    frame.revalidate();

    String meno2 = this.stol1.dajKartuZRukyCislo(2).getMeno();
    this.k2 = new ObrazkyKariet(860,700,stol1,2,hrac1);
    frame.add(k2);
    //frame.addMouseListener(k2);
    frame.revalidate();

    String meno3 = this.stol1.dajKartuZRukyCislo(3).getMeno();
    this.k3 = new ObrazkyKariet(440,700,stol1,3,hrac1);
    frame.add(k3);
    //frame.addMouseListener(k3);
    frame.revalidate();

    String meno4 = this.stol1.dajKartuZRukyCislo(4).getMeno();
    this.k4 = new ObrazkyKariet(1000,700,stol1,4,hrac1);
    frame.add(k4);
    //frame.addMouseListener(k4);
    frame.revalidate();

    String meno5 = this.stol1.dajKartuZRukyCislo(5).getMeno();
    this.k5 = new ObrazkyKariet(300,700,stol1,5,hrac1);
    frame.add(k5);
    //frame.addMouseListener(k5);
    frame.revalidate();

    String meno6 = this.stol1.dajKartuZRukyCislo(6).getMeno();
    this.k6 = new ObrazkyKariet(1140,700,stol1,6,hrac1);
    frame.add(k6);
    //frame.addMouseListener(k6);
    frame.revalidate();

    String meno7 = this.stol1.dajKartuZRukyCislo(7).getMeno();
    this.k7 = new ObrazkyKariet(160,700,stol1,7,hrac1);
    frame.add(k7);
    //frame.addMouseListener(k7);
    frame.revalidate();

    String meno8 = this.stol1.dajKartuZRukyCislo(8).getMeno();
    this.k8 = new ObrazkyKariet(160,700,stol1,8,hrac1);
    frame.add(k8);
    //frame.addMouseListener(k8);
    frame.revalidate();

    String meno9 = this.stol1.dajKartuZRukyCislo(9).getMeno();
    this.k9 = new ObrazkyKariet(160,700,stol1,9,hrac1);
    frame.add(k9);
    //frame.addMouseListener(k9);
    frame.revalidate();

    } catch (IndexOutOfBoundsException e) {

    }

}
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import Hrac.Postava;
import Hrac.Stol;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import karty.Karta;

/**
 *
 * @author RSabo
 */
public class ObrazkyKariet extends JPanel implements MouseListener {

private final ImageIcon ikona;
private final Image obrazok;
private int x;
private int y;
private Stol stol;
private int poradie;
private Postava postava;

    public ObrazkyKariet(int x,int y,Stol stol,int poradie,Postava postava) {
        this.stol = stol;
        this.poradie = poradie;
        this.postava = postava;
        String menoKarty = stol.dajKartuZRukyCislo(poradie).getMeno();
        this.ikona = new ImageIcon(getClass().getResource("/obrazky/"+menoKarty+".png"));
        this.obrazok = ikona.getImage();
        this.x = x;
        this.y = y;
        this.setVisible(true);

    }

     public Image getImage(){
         return this.obrazok;
     }

@Override
    public void paintComponent(Graphics g){
        g.drawImage(obrazok, this.x, this.y, 140, 185, null);

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        stol.vyhodKartu(poradie, postava);
        System.out.println(stol.vypisRuku());
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }


}
 
Odpovědět 16. května 22:58
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:

ach jo.... už jsem ti to psal v minulém vláknu, cos tu postnul. Děláš to špatně. Házíš posluchače do třídy hra - takže ti to logicky otáčí všechny karty. Tvůj problém by se dal ošetřit třeba nějakým polem a vždycky bys na kliknutí myškou vybral tu danou kartu z pole.

Ale proč si to nepřekopeš a neuděláš si posluchač ve třídě karta?? Jestli řekneš, že na překopání programu nemáš čas atd. tak to jsou jen výmluvy. Jestli chceš, napiš mi PM a můžem se o tom pobavit. Jaké máš zadání, co potřebuješ udělat, jaké máš použít metodyky, jak mají být třídy propojené atd. Každopádně ten tvůj kód je humus.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 17. května 9:35
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
sphex
Člen
Avatar
sphex:

nemám tie karty v poli ale v arrayliste ... mám to vykreslene tak ako som chcel(na to som sa pytal v minulom vlakne ale okrem 5 bodov z ktorých by som ti vedel všetky vysvetliť len som na to nemal čas, som nikde v tvojej odpovedi nevidel riešenie, to je už ale jedno) problém je v tom že ja tie karty z toho arraylistu chcem vyhadzovať do ineho arraylistu, ale ked kliknem na hociktoru kartu na obrazovke stale mi to funguje iba pre tú v strede, a preto nemôžem dať mouselistenera do triedy s Kartou

 
Nahoru Odpovědět 17. května 12:39
Avatar
sphex
Člen
Avatar
sphex:

ale, chápem ako to myslíš,len ja neviem ako by som to vykreslovanie dal priamo do toho arraylistu a potom tam dal ten mouseclicker aby mi to fungovalo

 
Nahoru Odpovědět 17. května 13:04
Avatar
Atrament
Člen
Avatar
Odpovídá na sphex
Atrament:

Být tebou vůbec neztrácím čas snahou tohle nějak opravit, komplet to smaž a začni znova na zelené louce s tím že si nejdříve provedeš pořádný objektový návrh a pořádně si rozkreslíš co s čím jak bude komunikovat. Jelikož jde o karetní hru tak tam prostě musíš mít třídu Karta, pak samozřejmě další jako například Hráč, Balíček, Stůl atd. Takhle jak to máš, tak s tím tě každý soudný učitel/profesor musí vyhodit, nehledě k tomu, že vůbec nevidím možnost, že bys to tímto stylem mohl dotáhnout do nějaké funkční podoby.

 
Nahoru Odpovědět 17. května 17:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.