import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; /** * Luokka Alkudialogi, joka periytyy luokasta JDialog. Alkudialogi * määrittelee alussa näytettävän tasonvalintadialogin. * @author Karoliina Tiuraniemi * @version 1.0, 18.1.2009 */ public class Alkudialogi extends JDialog{ private Nappi nappi1; private Nappi nappi2; private int syotettyTaso; private static final long serialVersionUID = 1L; /** * Konstruktori, jossa luodaan alkudialogi * @param ikkuna johon alkudialogi liittyy * @param modal dialogiin on pakko reagoida ennen kuin * pääsee sulkemaan sen tai käsittelemään ikkunaa. */ public Alkudialogi(Ikkuna ikkuna, boolean modal){ super(ikkuna, modal); Otsikkopaneeli otsikkopaneeli = new Otsikkopaneeli(); Dimension otsikkokoko = new Dimension (260,70); otsikkopaneeli.setPreferredSize(otsikkokoko); otsikkopaneeli.setBackground(Varit.TUMMANVIHREA); this.add(BorderLayout.NORTH, otsikkopaneeli); JPanel paneeli = new JPanel(); paneeli.setBackground(Varit.TUMMANVIHREA); this.add(BorderLayout.CENTER, paneeli); this.setTitle("Valitse taso"); MouseListener kuuntelija = new AlkuKuuntelija(); ImageIcon leppakerttu = new ImageIcon("src/img/leppakerttu.png"); this.nappi1 = new Nappi(leppakerttu); this.nappi1.piirra(); this.nappi1.addMouseListener(kuuntelija); paneeli.add(nappi1); ImageIcon koppakuoriainen = new ImageIcon("src/img/koppakuoriainen.png"); this.nappi2 = new Nappi(koppakuoriainen); this.nappi2.piirra(); this.nappi2.addMouseListener(kuuntelija); paneeli.add(nappi2); Dimension nappiKoko = new Dimension((koppakuoriainen.getIconWidth() + 10), (koppakuoriainen.getIconHeight() + 10)); this.nappi1.setPreferredSize(nappiKoko); this.nappi2.setPreferredSize(nappiKoko); this.pack(); // sulkee ohjelman, kun ikkuna suljetaan this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); this.setLocationRelativeTo(ikkuna); } /** * Metodi, joka antaa alkudialogissa valitun tason. * @return this.syotettyTaso */ public int annaSyotettyTaso(){ return this.syotettyTaso; } /** * Sisäluokka Alkukuuntelija, joka toteuttaa luokan Kuuntelija. * Luokka määrittelee, mitä tapahtuu kun Alkudialogin nappeja * klikataan. * @author Karoliina Tiuraniemi * */ private class AlkuKuuntelija extends Kuuntelija { /** * Metodi, joka kertoo mitä tapahtuu kun nappeja klikataan. * Nappi1 asettaa muistiin tason 1, nappi2 tason 2. * @param e MouseEvent */ public void mouseClicked(MouseEvent e){ if (e.getSource() instanceof JButton){ // talletetaan omaan muuttujaansa klikattu nappi JButton nappi = (JButton) e.getSource(); // jos on klikattu nappi1:ä if (nappi.equals(Alkudialogi.this.nappi1)){ // laitetaan muistiin arvo 1 Alkudialogi.this.syotettyTaso = 1; } else if (nappi.equals(Alkudialogi.this.nappi2)){ Alkudialogi.this.syotettyTaso = 2; } Alkudialogi.this.setVisible(false); } } } /** * Sisäluokka Otsikkopaneeli, joka toteuttaa luokan JPanel. * Luokka määrittelee paneelin taustavärin ja piirtää siihen * otsikkokuvan. * @author Karoliina Tiuraniemi * */ private class Otsikkopaneeli extends JPanel { private static final long serialVersionUID = 1L; /** * Metodi, joka piirtää paneelin. * @param g Graphics */ public void paintComponent(Graphics g){ // graphics olio tyyppimuunnetaan graphics 2D:ksi Graphics2D g2 = (Graphics2D) g; // määritellään käytetty väri, johon värjätään g2.setPaint(Varit.TUMMANVIHREA); // määritellään paneelin kokoinen neliö, jonka sisälle värjäys tulee int leveys = this.getWidth(); int korkeus = this.getHeight(); Rectangle r = new Rectangle(0,0,leveys,korkeus); // kutsutaan graphic-oliota, joka täyttää neliön. g2.fill(r); try { BufferedImage otsikko = ImageIO.read(new File("src/img/otsikko.png")); // muistiin: otsikon fontti Blippo Heavy, Gimp/Paniikin koneet g.drawImage(otsikko,0,0,this); } catch (IOException e){ System.err.println("IOException"); } } } }