23.9 Buttons mit Bildern
 
CaesarButton
Download:
Caesar.jpg
InvCaesar.jpg
In diesem kleinen Kapitel lernen wir, wie wir ein Button mit einem Bild versehen können. Wieder lassen wir  CaesarButton von JButton erben. Damit verfügt unsere Button schon mal über die Funktionalität eines 'normalen' JButtons. Auch soll die Ereignisbehandlung an unser Button koppelt werden, CaesarButton implementiert also wieder das Interface ActionListener. Wie die Ausnahmebehandlung und das Abfangen ungewollter Eingaben implementiert ist, kann man leicht dem Quelltext entnehmen.
 
Download:

CaesarButton.
java

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class CaesarButton extends JButton 
                          implements ActionListener{
  KryptGUI gui;
  Image caesarBild;

  public CaesarButton(KryptGUI 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(
           EnKrypt.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 InvCaesarButton ist analog zur Klasse CaesarButton implementiert. Der Unterschied besteht darin, dass der in dem unteren Ausgabefeld stehende Text mit dem Schlüssel transformiert und im oberen Ausgabefeld transformiert wird, also in den Originaltext zurück transformiert wird.
 
Download:
InvCaesarButton. java
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class InvCaesarButton extends JButton 
                             implements ActionListener{
  KryptGUI gui;
  Image caesarBild;

  public InvCaesarButton(KryptGUI 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(
           DeKrypt.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");
    }
  }
}
  Im nächsten Abschnitt schauen wir uns an, wie wir das Zeichenfeld für unsere Buttons implementieren.
   
zu 23.10 Die Zeichenfläche für ein Button
zur Startseite www.pohlig.de  (C) MPohlig 2004