Ausnahmefenster
package Kurs2.Gui;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class AusnahmeFenster implements ActionListener {private JFrame hf;
private JButton okButton;
private JButton exitButton;
private Exception myException;
/**
* Aufbau des Fensters zur Ausnahmebehandlung
*
* @param fehlermeldung ein beliebiger Fehlertext der angezeigt wird
* @param e Die Ausnahme die angezeigt werden soll
*/
public AusnahmeFenster(String fehlermeldung, Exception e) {
JLabel logo;
JPanel buttonPanel;
myException = e;
// 1. Erzeugen einer neuen Instanz eines Swingfensters
hf = new JFrame("Anwendungsfehler");
// 8. Labelerzeugung
logo = meinLogo();
// 4. Nicht beenden bei Schliesen des Fenster
hf.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
// 5. Anlegen der Buttons
okButton = new JButton();
okButton.setText("Stack Trace");
exitButton = new JButton();
exitButton.setText("Beenden");
// 10. Hinzügen der Eventbehandlung
okButton.addActionListener(this);
exitButton.addActionListener(this);
// 6. Aufbau des Panels
buttonPanel = new JPanel(new GridLayout(1, 0));
buttonPanel.add(exitButton);
buttonPanel.add(okButton);
JTextArea fehlertextArea = new JTextArea(2, 20);
fehlertextArea.append(fehlermeldung + "\n");
fehlertextArea.append("Exception: "+ myException);
// 7. Aubau des ContentPanes
Container myPane = hf.getContentPane();
myPane.add(logo, BorderLayout.NORTH);
myPane.add(fehlertextArea, BorderLayout.CENTER);
myPane.add(buttonPanel, BorderLayout.SOUTH);
// 2.1 Das Layout des JFrame berechnen.
hf.pack();
// 3. Gewünschte Größe setzen
// 1. Parameter: horizontale Größe in Pixel
// 2. Parameter: vertikale Größe
hf.setSize(350, 300);
// 2.2 Sichtbar machen des JFrames. Immer im Vordergrund
hf.setVisible(true);
hf.setAlwaysOnTop(true);
}
/**
* Implementieren des Logos
* 9.ter Schritt
* @return Zeiger auf das Logoobjekt
*/
private JLabel meinLogo() {
URL logoURL;
JLabel logoLabel;
String myURL = "http://www.dhbw-mannheim.de/fileadmin/templates/default/img/signet.gif";
try {
logoURL = new URL(myURL);
ImageIcon myImage = new ImageIcon(logoURL);
logoLabel = new JLabel(myImage);
} catch (java.net.MalformedURLException e) {
System.out.println(e);
System.out.println("Logo URL kann nicht aufgelöst werden");
logoLabel = new JLabel("Logo fehlt");
}
return logoLabel;
}
/**
* Behandlung dere JButton Ereignisse
* 11. ter Schritt
* @param e
*/
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) (e.getSource());
if (source == exitButton) {
System.exit(0);
}
if (source == okButton) {
System.out.println("OK Button clicked");
myException.printStackTrace();
}
}
/**
* Hauptprogramm zum Testen des Ausnahmefensters
* @throws Exception
*/
public static void main(String[] args) {
AusnahmeFenster dasFenster;
try {myTestMethod();}
catch (Exception e) {
dasFenster = new AusnahmeFenster("Hier läuft etwas schief",e);
}
}
/**
* Eine Testmethode die eine durch eine Division durch Null eine
* Ausnahme provoziert
* @throws Exception
*/
public static void myTestMethod() throws Exception {
int a = 5;
int b = 5;
int c = 10;
c = c / (a-b);
System.out.println("Programm regulär beendet");
}
}
Taschenrechner
Die Universität Bielefeld (Herr Jan Krüger) bieten die Lösung der Programmieraufgabe an unter:
Innere und anonyme Klasse
Aufgabe 1
Klasse SystemExitListener
package Kurs2.Gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author sschneid
* Implementierung eines ActionListener der als Aktion die Anwendung
* beendet
*/
public class SystemExitListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
Einfügen eines Menüs (Optional)
import javax.swing.*; ...
JMenuItem jmi = new JMenuItem("Beenden");
jmi.addActionListener(new SystemExitListener());
JMenu jm = new JMenu("Ablage");
jm.add(jmi);
JMenuBar jmb = new JMenuBar();
jmb.add(jm);
hf.setJMenuBar(jmb);
Aufgabe 2
Hinweis: Die Klasse wurde in AusnahmeFensterInnerer umbenannt
package Kurs2.Gui;import java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.net.URL;import javax.swing.*;public class AusnahmeFensterInnere {
private JFrame hf;private JButton okButton;private JButton exitButton;private Exception myException;public class SystemExitAction implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);System.out.println(hf);}}
/*** Aufbau des Fensters zur Ausnahmebehandlung** @param fehlermeldung ein beliebiger Fehlertext der angezeigt wird* @param e Die Ausnahme die angezeigt werden soll*/public AusnahmeFensterInnere(String fehlermeldung, Exception e) {JLabel logo;JPanel buttonPanel;myException = e;// 1. Erzeugen einer neuen Instanz eines Swingfenstershf = new JFrame("Anwendungsfehler");// 8. Labelerzeugunglogo = meinLogo();// 4. Nicht beenden bei Schliesen des Fensterhf.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);// 5. Anlegen der ButtonsokButton = new JButton();okButton.setText("Stack Trace");exitButton = new JButton();exitButton.setText("Beenden");// 10. Hinzügen der EventbehandlungokButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {myException.printStackTrace();}});exitButton.addActionListener(new SystemExitAction());// 6. Aufbau des PanelsbuttonPanel = new JPanel(new GridLayout(1, 0));buttonPanel.add(exitButton);buttonPanel.add(okButton);JTextArea fehlertextArea = new JTextArea(2, 20);fehlertextArea.append(fehlermeldung + "\n");fehlertextArea.append("Exception: "+ myException);// 7. Aubau des ContentPanesContainer myPane = hf.getContentPane();myPane.add(logo, BorderLayout.NORTH);myPane.add(fehlertextArea, BorderLayout.CENTER);myPane.add(buttonPanel, BorderLayout.SOUTH);JMenuItem jmi = new JMenuItem("Beenden");jmi.addActionListener(new SystemExitListener());JMenu jm = new JMenu("Ablage");jm.add(jmi);JMenuBar jmb = new JMenuBar();jmb.add(jm);hf.setJMenuBar(jmb);// 2.1 Das Layout des JFrame berechnen.hf.pack();// 3. Gewünschte Größe setzen// 1. Parameter: horizontale Größe in Pixel// 2. Parameter: vertikale Größehf.setSize(350, 300);// 2.2 Sichtbar machen des JFrames. Immer im Vordergrundhf.setVisible(true);hf.setAlwaysOnTop(true);}/*** Implementieren des Logos* 9.ter Schritt* @return Zeiger auf das Logoobjekt*/private JLabel meinLogo() {URL logoURL;JLabel logoLabel;String myURL ="http://www.dhbw-mannheim.de/fileadmin/templates/default/img/signet.gif";try {logoURL = new URL(myURL);ImageIcon myImage = new ImageIcon(logoURL);logoLabel = new JLabel(myImage);} catch (java.net.MalformedURLException e) {System.out.println(e);System.out.println("Logo URL kann nicht aufgelöst werden");logoLabel = new JLabel("Logo fehlt");}return logoLabel;}/*** Behandlung dere JButton Ereignisse* 11. ter Schritt* @param e*/public void actionPerformed(ActionEvent e) {JButton source = (JButton) (e.getSource());if (source == exitButton) {System.exit(0);}if (source == okButton) {System.out.println("OK Button clicked");myException.printStackTrace();}}/*** Hauptporgramm zum Testen des Ausnahmefensters* @throws Exception*/public static void main(String[] args) {AusnahmeFensterInnere dasFenster;try {myTestMethod();}catch (Exception e) {dasFenster = new AusnahmeFensterInnere("Hier läuft etwas schief",e);}}/*** Eine Testmethode die eine durch eine Division durch Null eine* Ausnahme provoziert* @throws Exception*/public static void myTestMethod() throws Exception {int a = 5;int b = 5;int c = 10;c = c / (a-5);System.out.println("Programm regulär beendet");}}
