Termanty / JShakki

JavaLabran harjoitustyö kesä 2014
0 stars 0 forks source link

Hiirenkuuntelijan palauttamat koordinaatit riippuvat käyttöjärjestelmän ikkunamanagerin mitoista #1

Open kumikumi opened 10 years ago

kumikumi commented 10 years ago

Hiirenkuuntelijan eri hiiri-eventeille (mouseClicked, mousePressed, mouseMoved ...) ilmoittamat koordinaatit pitävät sisällään käyttöjärjestelmän ikkunamanagerin ikkunoille tekemien reunojen koon. Tämä on varsin ikävää, sillä ei voida etukäteen tietää, mikä ikkunointijärjestelmä käyttäjällä on käytössä, eikä kaikkiin mahdollisuuksiin voida varautua. Itse kohtasin tämän ongelman käyttäessäni XFCE-työpöytää.

Ongelman toistaminen:

lisäämällä mouseMoved -metodiin rivi

System.out.println("Hiiri (" + e.getPoint().x + ", " + e.getPoint().y + ")");

ja käynnistämällä sovellus ja liikuttamalla hiiri vasempaan yläkulmaan saatiin tulostus

Hiiri (3, 30)

Ongelma ratkeaa, jos GraafinenKayttoliittyma-luokassa lisaaKuuntelijat -metodissa annetaan hiiren kuuntelijat framen sijaan piirtoalustalle:

    private void lisaaKuuntelijat() {
        piirtoalusta.addMouseListener(new HiirenKuuntelija(peli, piirtoalusta));
        piirtoalusta.addMouseMotionListener(new HiirenKuuntelija(peli, piirtoalusta));
        //frame.addMouseListener(new HiirenKuuntelija(peli, piirtoalusta));
        //frame.addMouseMotionListener(new HiirenKuuntelija(peli, piirtoalusta));
    }

Nyt hiiren vieminen vasempaan yläkulmaan aiheuttaa likimain tulostuksen:

Hiiri (0, 0)

Nyt OS-luokka voidaan poistaa käytöstä ja huomataan kuinka graafisen käyttöliittymän elementit reagoivat hiireen sen ollessa niiden yläpuolella.

Termanty commented 10 years ago

Kiitti. Oma ratkaisuni oli aika purkka viritys, mutta en keksinyt parempaa.