P
Phoe
Gast
Hi,
ich versuche ein Programm geschrieben, dass einwandfrei funktioniert. Nun wollte ich eine Art Addon schreiben, das über das JMenu aufrufbar ist. Ich möchte das Hauptprogramm ungern verändern. Also versuche ich einen neuen Menüpunkt über eine 2. Java-File hinzuzufügen. Allerdings funktioniert dies nicht. Hier der betroffene Teil des Quellcodes beider Files.
ApplicationWindow.java
addon1_DateiMenu.java
Ich denke es ist eine Kleinigkeit, die ich nicht sehe, aber danke für alles im Voraus.
mfG Phoe
ich versuche ein Programm geschrieben, dass einwandfrei funktioniert. Nun wollte ich eine Art Addon schreiben, das über das JMenu aufrufbar ist. Ich möchte das Hauptprogramm ungern verändern. Also versuche ich einen neuen Menüpunkt über eine 2. Java-File hinzuzufügen. Allerdings funktioniert dies nicht. Hier der betroffene Teil des Quellcodes beider Files.
ApplicationWindow.java
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
/**
* Hier wird der Ereignishandler für das MenuItem durch das MenuItem selbst
* implementiert. Man spart sich dadurch die Definition einer separaten
* Ereignishandler-Klasse. Die Methode actionPerformed muss somit durch die
* MenuItem-Klasse selbst implementiert werden.
*/
class DateiOeffnenItem extends JMenuItem implements ActionListener {
public DateiOeffnenItem () {
super ("Oeffnen");
addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
/**
* Anstelle einer Ausgabe auf die Konsole wird hier ein
* Meldungsfenster erzeugt. Dem Meldungsfenster muss mitgeteilt werden,
* welches bereits vorhandene Fenster das Elternfenster sein soll.
* Die Position des Meldungsfensters wird dann relativ zum Elternfenster
* festgelegt. Da es zur Zeit nur das Hauptfenster der Anwendung gibt,
* wird dieses als Elternfenster angegeben.
*/
JOptionPane.showMessageDialog (
ApplicationWindow.theFrame, // Elternfenster des Meldungsfensters
"Datei -> Oeffnen", // Meldungstext
"Titel", // Titel des Meldungsfensters
JOptionPane.INFORMATION_MESSAGE); // Art der Meldung
}
}
class DateiSpeichernItem extends JMenuItem implements ActionListener {
public DateiSpeichernItem () {
super ("Speichern");
addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
System.out.println ("Datei -> Speichern");
}
}
class DateiMenu extends JMenu {
public DateiMenu () {
super ("Datei");
add (new DateiOeffnenItem());
addSeparator();
add (new DateiSpeichernItem());
}
}
class Menuezeile extends JMenuBar {
public Menuezeile () {
add (new DateiMenu());
}
}
public class ApplicationWindow extends JFrame {
class WindowEventHandler extends WindowAdapter {
public void windowClosing (WindowEvent e) {
System.exit(0); // Anwendung beenden mit Fehlercode 0 ans Betriebssystem
}
}
public ApplicationWindow () {
// Ereignishandler für das Fenster festlegen:
addWindowListener(new WindowEventHandler());
// Menuezeile installieren:
setJMenuBar (new Menuezeile());
// Eigenschaften des Fensters festlegen:
setTitle ("Willkommen bei Swing mit Menuezeile!");
setSize (400, 300); // Breite: 400 Pixel; Hoehe: 300 Pixel
setVisible (true); // Fensterrahmen sichtbar machen
}
/**
* Oeffentliche Klassenvariable, speichert eine Referenz auf das
* Anwendungsfenster. Auf diese Weise kann auch in Ereignishandlern für
* MenuItems ein Meldungsfenster angezeigt werden, das relativ zum
* Anwendungsfenster positioniert werden kann.
*/
public static JFrame theFrame;
public static void main (String[] args) {
/**
* Hier merken wir uns die Referenz des Anwendungsfensters
* in einer Klassenvariablen.
*/
theFrame = new ApplicationWindow ();
}
}
addon1_DateiMenu.java
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class addon1_menu extends JMenuItem implements ActionListener
{
public addon1_menu ()
{
super ("Addon");
addActionListener (this);
}
public void actionPerformed(ActionEvent erg)
{
}
}
public class addon1_DateiMenu extends DateiMenu
{
public void DateiMenu ()
{
//super.DateiMenu(); //unter Scite wirft er mir an dieser Stelle einen Error aus, er könnte die Methode nicht finden
add (new addon1_menu());
}
}
Ich denke es ist eine Kleinigkeit, die ich nicht sehe, aber danke für alles im Voraus.
mfG Phoe