Eventbehandlung von Objecten

Aus Wiklet

Wechseln zu: Navigation, Suche

Dieses Beispiel zeigt, wie verschiedene Objecte (z.B. JTextField) einem Listener hinzugefügt werden und wie dieser die Ereignisse aufteilt. Der EventSplitter ist in diesem Beispiel eine eigene Klasse, die sozusagen alle Events empfängt und verteilt auf dementsprechen eigene Methoden, die sich in der Klasse AllgemeineEvents befinden. Diese Variante eignet sich besonders gut, wenn viele Objecte gleiche Ereignisse auslösen können und getrennt abgearbeit werden müssen und dabei nur einmal instanziert werden sollen.

Anmerkung: Dieses Beispiel hat eigentlich nichts mit objektorientiertem Programmieren zu tun, sondern mehr mit prozeduralem Programmieren und soll somit nur als eine weiter Möglichkeit angesehen werden. Bei objektorientiertem Programmieren sollten zu viele statische Methoden vermieden werden, da sonst das Program wegen einem Pufferüberlauf abstürzen könnte, mindestens jedoch langsamer abläuft !!!


import java.awt.event.*;
import java.text.*;
 
import javax.swing.*;
/* ############################################################################# */ 
class Test
{
   public static void main(String args[])
   {
      /* die in der class AllgemeineEvents
      befindliche Methode form_MainStart aufrufen */
      new AllgemeineEvents().form_MainStart(args);
   }
}
/* ############################################################################# */
class EventSplitter
{
   /* die Ereignisquelle "eventSource" steht in der
   classe EventSplitter jeder methode zur Verfügung */
   private String eventSource;
/* _____________________________________________________________________________ */
   public EventSplitter(String eventSource)
   {
      /* in diesem Konstructor wird der übergebene
      String "eventSource" empfangen */
      this.eventSource = eventSource;
   }
/* ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  # */
   class Action_Event implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         if (eventSource.equals("text1"))
         {
            /* wenn ein "actionPerformed" ausgelöst wurde
            und der String "eventSource" = text1 dann
            rufe die Methode text1_ActionPerformed in der
            class AllgemeineEvents auf */
            AllgemeineEvents.text1_ActionPerformed(event);
         }
         if (eventSource.equals("text2"))
         {
            /* wenn ein "actionPerformed" ausgelöst wurde
            und der String "eventSource" = text2 dann
            rufe die Methode text2_ActionPerformed in der
            class AllgemeineEvents auf */
            AllgemeineEvents.text2_ActionPerformed(event);
         }
         /* erweiterbar */
      }
   }
/* ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  # */
   class Mouse_Event extends MouseAdapter
   {
      public void mouseClicked(MouseEvent event)
      {
         if (eventSource.equals("text1"))
         {
            /* wenn ein "mouseClicked" ausgelöst wurde
            und der String "eventSource" = text1 dann
            rufe die Methode text1_MouseClicked in der
            class AllgemeineEvents auf */
            AllgemeineEvents.text1_MouseClicked(event);
         }
         if (eventSource.equals("text2"))
         {
            /* wenn ein "mouseClicked" ausgelöst wurde
            und der String "eventSource" = text2 dann
            rufe die Methode text2_MouseClicked in der
            class AllgemeineEvents auf */
            AllgemeineEvents.text2_MouseClicked(event);
         }
         /* erweiterbar */
      }
      /* erweiterbar */
   }
/* ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  # */
   class Window_Event extends WindowAdapter
   {
      public void windowClosing(WindowEvent event)
      {
         event.getWindow().dispose();
      }
/* _____________________________________________________________________________ */
      public void windowClosed(WindowEvent event)
      {
         System.exit(0);
      }
      /* erweiterbar */
   }
   /* erweiterbar */
}
/* ############################################################################# */
class AllgemeineEvents
{
   /* die Variable "form" als JFrame innerhalb der
   class AllgemeineEvents declarieren */
   private static JFrame form;
   /* die Variable "text1" als JFrame innerhalb der
   class AllgemeineEvents declarieren */
   private static JTextField text1;
   /* die Variable "text2" als JFrame innerhalb der
   class AllgemeineEvents declarieren */
   private static JTextField text2;
/* _____________________________________________________________________________ */
   public void form_MainStart(String[] args)
   {
      /* form als JFrame anlegen */
      form = new JFrame();
      /* Position "Links,Oben" und Größe ",Breite,Höhe" */
      form.setBounds(100, 100, 400, 400);
 
      /* text1 als JTextField anlegen */
      text1 = new JTextField();
      /* Position "Links,Oben" und Größe ",Breite,Höhe" */
      text1.setBounds(10, 10, 150, 20);
      /* Textfeld "text1" erscheinen lassen */
      text1.setVisible(true);
 
      /* text2 als JTextField anlegen */
      text2 = new JTextField();
      /* Position "Links,Oben" und Größe ",Breite,Höhe" */
      text2.setBounds(10, 40, 150, 20);
      /* Textfeld "text2" erscheinen lassen */
      text2.setVisible(true);
 
      /* setzt die Standartausrichtung auf "null",
      da sich sonst das Textfeld im zentrum befindet. */
      form.getContentPane().setLayout(null);
 
      /* das Textfeld "text1" auf das Fenster setzen */
      form.getContentPane().add(text1);
      /* das Textfeld "text2" auf das Fenster setzen */
      form.getContentPane().add(text2);
 
      /* Fenster "form" erscheinen lassen */
      form.setVisible(true);
 
      /* "text1" dem ActionListener hinzufügen und
      der class EventSplitter den sourceString
      "text1" übergeben */
      text1.addActionListener(new EventSplitter("text1").new Action_Event());
      /* "text1" dem MouseListener hinzufügen und
      der class EventSplitter den sourceString
      "text1" übergeben */
      text1.addMouseListener(new EventSplitter("text1").new Mouse_Event());
      /* "text2" dem ActionListener hinzufügen und
      der class EventSplitter den sourceString
      "text2" übergeben */
      text2.addActionListener(new EventSplitter("text2").new Action_Event());
      /* "text2" dem MouseListener hinzufügen und
      der class EventSplitter den sourceString
      "text2" übergeben */
      text2.addMouseListener(new EventSplitter("text2").new Mouse_Event());
   }
/* _____________________________________________________________________________ */
   public static void text1_ActionPerformed(ActionEvent event)
   {
      /* nur diese Methode wird nach einem actionPerformed
      bei "text1" ausgeführt */
      text1.setText("text1 Return gedrückt");/* zum testen */
   }
/* _____________________________________________________________________________ */
   public static void text1_MouseClicked(MouseEvent event)
   {
      /* nur diese Methode wird nach einem mouseClicked
      bei "text1" ausgeführt */
      text1.setText("text1 geklickt");/* zum testen */
   }
/* _____________________________________________________________________________ */
   public static void text2_ActionPerformed(ActionEvent event)
   {
      /* nur diese Methode wird nach einem actionPerformed
      bei "text2" ausgeführt */
      text2.setText("text2 Return gedrückt");/* zum testen */
   }
/* _____________________________________________________________________________ */
   public static void text2_MouseClicked(MouseEvent event)
   {
      /* nur diese Methode wird nach einem mouseClicked
      bei "text2" ausgeführt */
      text2.setText("text2 geklickt");/* zum testen */
   }
}

Vorlage:Stub