Tapahtumankuuntelijaolio voidaan liittää monella erilaisella tavalla käyttöliittymäkomponenttiin. Alla on vain muutama esimerkki.
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.*; // vain fonttia varten
import java.awt.*; // "
public class HiiriTuliJaMeni1 extends JFrame
implements MouseListener {
private JTextArea alue = new JTextArea (1, 11);
private int puremia = 0;
public HiiriTuliJaMeni1() {
alue.setEditable(false);
getContentPane().add ("Center", alue);
alue.setFont(new Font("Serif", Font.BOLD, 20));
alue.setText(" Hiirtä ei ole näkynyt.");
alue.addMouseListener(this); // luokka ITSE toteuttaa
// kuuntelijan
}
public void mouseEntered(MouseEvent tapahtuma) {
alue.setText(" Hiiri tuli!");
}
public void mouseExited(MouseEvent tapahtuma) {
alue.setText(" Hiiri meni!");
}
public void mouseClicked(MouseEvent tapahtuma) {
++puremia;
alue.setText(" Hiiri puri! ("+puremia+". kerta)");
}
// KAIKKI luvatut metodit on toteutettava (edes tyhjinä):
public void mousePressed(MouseEvent tapahtuma) { }
public void mouseReleased(MouseEvent tapahtuma) { }
public static void main(String[] args) {
HiiriTuliJaMeni1 ikkuna = new HiiriTuliJaMeni1();
ikkuna.setTitle("Hiirielämää");
ikkuna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ikkuna.pack();
ikkuna.setVisible(true);
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.*; // vain fonttia varten
import java.awt.*; // "
public class HiiriTuliJaMeni2 extends JFrame {
private JTextArea alue = new JTextArea (1, 11);
private int puremia = 0;
public HiiriTuliJaMeni2() {
alue.setEditable(false);
getContentPane().add ("Center", alue);
alue.setFont(new Font("Serif", Font.BOLD, 20));
alue.setText(" Hiirtä ei ole näkynyt.");
alue.addMouseListener( // nimetön sisäluokka MouseAdapterin
new MouseAdapter() { // aliluokkana (vain tarpeell. toteut.)
public void mouseEntered(MouseEvent tapahtuma) {
alue.setText(" Hiiri tuli!");
}
public void mouseExited(MouseEvent tapahtuma) {
alue.setText(" Hiiri meni!");
}
public void mouseClicked(MouseEvent tapahtuma) {
++puremia;
alue.setText(" Hiiri puri! ("+puremia+". kerta)");
}
}
);
}
public static void main(String[] args) {
HiiriTuliJaMeni2 ikkuna = new HiiriTuliJaMeni2();
ikkuna.setTitle("Hiirielämää");
ikkuna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ikkuna.pack();
ikkuna.setVisible(true);
}
}
Toki kuuntelija voitaisiin ohjelmoida myös nimettömänä luokkana,
joka suoraan toteuttaa kuuntelijarajapintaluokan
(HiiriTuliJaMeni2b.java),
mutta tässä ratkaisussa tyhjiksi jäävätkin metodit on toteutettava:
alue.addMouseListener( // nimetön sisäluokka MouseListenerin
new MouseListener() { // toteuttajana
public void mouseEntered(MouseEvent tapahtuma) {
alue.setText(" Hiiri tuli!");
}
public void mouseExited(MouseEvent tapahtuma) {
alue.setText(" Hiiri meni!");
}
public void mouseClicked(MouseEvent tapahtuma) {
++puremia;
alue.setText(" Hiiri puri! ("+puremia+". kerta)");
}
public void mousePressed(MouseEvent tapahtuma) { }
public void mouseReleased(MouseEvent tapahtuma) { }
}
);
Jos kaikki kuuntelijan metodit joka tapauksessa ohjelmoidaan
ei-tyhjiksi algoritmeiksi, rajapintaluokan käyttö adapterin
sijaan on perusteltua.
(Kuten edellisessä esimerkissä, myös tässä voitaisiin rajapintaluokka toteuttaa itsekin.)
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.*; // vain fonttia varten
import java.awt.*; // "
public class HiiriTuliJaMeni3 extends JFrame {
private JTextArea alue = new JTextArea (1, 11);
private int puremia = 0;
public HiiriTuliJaMeni3() {
alue.setEditable(false);
getContentPane().add ("Center", alue);
alue.setFont(new Font("Serif", Font.BOLD, 20));
alue.setText(" Hiirtä ei ole näkynyt.");
alue.addMouseListener(new HiirenHuomaaja());
}
private class HiirenHuomaaja extends MouseAdapter {
public void mouseEntered(MouseEvent tapahtuma) {
alue.setText(" Hiiri tuli!");
}
public void mouseExited(MouseEvent tapahtuma) {
alue.setText(" Hiiri meni!");
}
public void mouseClicked(MouseEvent tapahtuma) {
++puremia;
alue.setText(" Hiiri puri! ("+puremia+". kerta)");
}
}
public static void main(String[] args) {
HiiriTuliJaMeni3 ikkuna = new HiiriTuliJaMeni3();
ikkuna.setTitle("Hiirielämää");
ikkuna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ikkuna.pack();
ikkuna.setVisible(true);
}
}
Takaisin kurssin sisältösivulle.