21.5 Buttons mit Bildern
 
CaesarButton
Download:
Caesar.jpg
InvCaesar.jpg
Wir lassen CaesarButton von JButton erben. Damit verfügt unsere Button schon mal über die Funktionalität eines 'normalen' JButtons. Zusätzlich wollen wir die Ereignisbehandlung an unser Button koppeln, CaesarButton implementiert also das Interface ActionListener. Wie die Ausnahmebehandlung und das Abfangen ungewollter Eingaben implementiert ist, kann man leicht dem Quelltext entnehmen.
 
Download:

CaesaButton.java

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;



public class CaesarButton extends JButton 

                          implements ActionListener{

  VGUI gui;

  Image caesarBild;



  public CaesarButton(VGUI gui){

    this.gui = gui;

    caesarBild = 

       Toolkit.getDefaultToolkit().getImage("Caesar.jpg");

    add(new ButtonPanel(caesarBild));

    addActionListener(this);

  }

  

  public void actionPerformed(ActionEvent e){

    int schluessel;

    try{

      schluessel = 

         Integer.parseInt(gui.schluesselFeld.getText());

      if (schluessel<26) {

         gui.ausgabeFeld.setText(

           Krypt.caesar(gui.eingabeFeld.getText(),schluessel));

      }

      else{

         gui.ausgabeFeld.setText(

           "Cäsarverschlüsselung erwartet eine ganze Zahl<26");

      }

    }

    catch(NumberFormatException nfe){

      gui.ausgabeFeld.setText("Falsches Schlüssel-Format");

    }

  }

}

Das Button bekommt ein Zeichenbereich

 

Der gelb unterlegte Teil zeigt, wie man ein Bild aus einer Datei einer Variablen zuweist. Auf die hier verwendete Technik wollen wir nicht n äher eingehen. Wie eine weitere Analyse des Textes (grün unterlegt) zeigt, wird unserem Button eine eigene Zeichenfläche hinzugefügt. Dies geschieht mittels der Methode add(..), die unser Button von JButton erbte. Wir werden den Konstruktor unseres ButtonPanels so konstruieren, dass man bei seinem Aufruf das Bild, das unserem Button hinzugefügt werden soll, übergibt. Die Klasse InvCaesarVButton ist analog zur Klasse CaesarButton gebaut. Der Unterschied besteht darin, dass der in dem unteren Ausgabefeld stehende Text mit dem umgekehrten Schlüssel transformiert und im oberen Ausgabefeld transformiert wird.
 
Download:
InvCaesarButton. java
import javax.swing.*;

import java.awt.event.*;

import java.awt.*;



public class InvCaesarButton extends JButton 

                             implements ActionListener{

  VGUI gui;

  Image caesarBild;



  public InvCaesarButton(VGUI gui){

    this.gui = gui;

    caesarBild = 

      Toolkit.getDefaultToolkit().getImage("InvCaesar.jpg");

    add(new ButtonPanel(caesarBild));

    addActionListener(this);

  }

  

  public void actionPerformed(ActionEvent e){

    int schluessel;

    try{

      schluessel = 

        Integer.parseInt(gui.schluesselFeld.getText());

      if (schluessel<26) {

        gui.eingabeFeld.setText(

           Krypt.caesar(

           gui.ausgabeFeld.getText(),-schluessel).toLowerCase());

      }

      else{

         gui.eingabeFeld.setText(

           "Cäsarverschlüsselung erwartet eine ganze Zahl < 26");

      }

    }

    catch(NumberFormatException nfe){

      gui.eingabeFeld.setText("Falsches Schlüssel-Format");

    }

  }

}
zu 21.4.3 Die Zeichenfläche für einen Button und Polymorphie
zur Startseite www.pohlig.de  (C) MPohlig 2003