/************************************************************/
/* PetriFrame.java Version 2003/03/28 */
/* */
/* Tom Fellmann, Christoph Weißenborn */
/* */
/************************************************************/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.border.*;
/********************************************************************/
/* Klasse MainMenu */
/********************************************************************/
class PetriFrame extends JFrame{
/* sonstig wichtige Datenstrukturen */
public static final int WEITER_OPTION = 8; //für Mitteilungsdialoge
public static final int ABBRUCH_OPTION = 16; //für Mitteilungsdialoge
public static final String[] FARB_NAME = {"hellgrün", "gelb", "blau", "pink",
"weiß", "orange", "rot", "schwarz",
"türkis", "violet", "rosa", "grau",
"dunkelblau", "grün", "braun"};
public static final Color[] FARB_WERT = {Color.green, Color.yellow, Color.blue, Color.magenta,
Color.white, Color.orange, Color.red, Color.black,
Color.cyan, new Color(160,32,160), new Color(255,144,144), Color.lightGray,
new Color(0,0,160), new Color(16,128,16), new Color(144,96,8)
};
public static final Color[] FARB_WERT_TEXTFARBE = {Color.black, Color.black, Color.white, Color.black,
Color.black, Color.black, Color.white, Color.white,
Color.black, Color.white, Color.black, Color.black,
Color.white, Color.white, Color.white};
protected Maus maus = new Maus(); // Struktur zur Mausbehandlung
/* alle "großen" Darstellungskomponenten */
protected Netz gefNetz = null;
protected PlatzMatrixPanel PlatzMatrixRE, PlatzMatrixUN;
protected KanteMatrixPanel KanteMatrixRE, KanteMatrixUN;
protected JPanel MatrizenRE, MatrizenUN;
protected boolean MatrizenSindRechts;
protected JMenuBar jMenuBar;
protected JScrollPane zeichenflaeche;
private JPopupMenu popupEingabe = null;
private JPopupMenu popupSimul = null;
protected StatusZeile jStatusBar;
private NeuDialog neuDialog; //NeuesNetz-Eigenschaften-Dialog
private JFileChooser dateiDialog; //Öffnen/Speichern-Dialog
private DefDialog defDialog; //Hilfe-Def-Dialog
private HilfeDialog hilfeDialog; //Hilfe-Hilfe-Dialog
private InfoDialog infoDialog; //Hilfe-Info-Dialog
/* notwendige "kleine" Darstellungskomponenten */
protected myJMenuItem jMenuItemDSchli, jMenuItemDSpeic, jMenuItemDSpeicU;
protected myJMenu jMenuItemBAnleg, jMenuItemBEntf;
protected myJMenuItem jMenuItemBEigen;
protected myJMenuItem jMenuItemAMatrR, jMenuItemAMatrU, jMenuItemAVergr;
protected myJMenuItem jMenuItemSimBeg, jMenuItemSimEnde;
/***************************************************/
/* Konstruktor */
/***************************************************/
public PetriFrame() {
enableEvents( AWTEvent.WINDOW_EVENT_MASK);
try {
init();
} catch (Exception e) { e.printStackTrace(); }
}//PetriFrame-Konstruktor
/***************************************************/
/* Initialisierung */
/***************************************************/
private void init() throws Exception {
JPanel contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(new BorderLayout());
jStatusBar = new StatusZeile();
setJMenuBar( jMenuBar = createMenu());
dateiDialog = new JFileChooser();
dateiDialog.addChoosableFileFilter( new DateiFilter("pngm","*.pngm (Petrinetz; gefärbten Marken)"));
dateiDialog.setCurrentDirectory( new File(System.getProperty("user.dir")));
gefNetz = new Netz(0); //benötigt existierendes Menü!!!
aktualisiereTitel( "");
zeichenflaeche = new JScrollPane( gefNetz, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
MatrizenRE = new JPanel( new BorderLayout( 0, 20)); //new GridLayout( 2, 1, 0, 3));
MatrizenRE.setBorder( new EmptyBorder(5,5,5,5));
MatrizenUN = new JPanel( new BorderLayout( 20, 0)); //new GridLayout( 1, 2, 3, 0));
MatrizenUN.setBorder( new EmptyBorder(5,5,5,5));
MatrizenRE.add( PlatzMatrixRE = new PlatzMatrixPanel( false), BorderLayout.NORTH);
MatrizenRE.add( KanteMatrixRE = new KanteMatrixPanel( false), BorderLayout.SOUTH);
MatrizenUN.add( PlatzMatrixUN = new PlatzMatrixPanel( false), BorderLayout.WEST);
MatrizenUN.add( KanteMatrixUN = new KanteMatrixPanel( false), BorderLayout.EAST);
MatrizenRE.setVisible(false);
MatrizenUN.setVisible(false);
JPanel jpanel = new JPanel( new BorderLayout(3,3));
jpanel.setBorder( new EmptyBorder( 3,3,3,3));
jpanel.add( zeichenflaeche, BorderLayout.CENTER);
jpanel.add( MatrizenRE, BorderLayout.EAST);
jpanel.add( MatrizenUN, BorderLayout.SOUTH);
contentPane.add( jpanel, BorderLayout.CENTER);
contentPane.add( jStatusBar, BorderLayout.SOUTH);
defDialog = new DefDialog(this, "Definitionen");
hilfeDialog = new HilfeDialog(this, "Hilfe");
infoDialog = new InfoDialog(this, "Info");
neuDialog = new NeuDialog(this, "Eigenschaften des Netzes");
}//init
private JMenuBar createMenu() {
JMenuBar jMB = new JMenuBar();
myJMenu jMenu, jMenu2;
/************************/
/* Untermenü Datei */
jMB.add( jMenu = new myJMenu("%Datei"));
jMenu.add( new myJMenuItem("%Neu", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiNeu_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("Ö%ffnen...", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiOeffnen_ActionPerformed(e); }
}));
jMenu.add( jMenuItemDSchli = new myJMenuItem("S%chließen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiSchliessen_ActionPerformed(e); }
}, false));
jMenu.addSeparator();
jMenu.add( jMenuItemDSpeic = new myJMenuItem("%Speichern", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiSpeichern_ActionPerformed(e); }
}, false));
jMenu.add( jMenuItemDSpeicU = new myJMenuItem("Speichern %unter...", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiSpeichernUnter_ActionPerformed(e); }
}, false));
jMenu.addSeparator();
jMenu.add( new myJMenuItem("%Beenden", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemDateiBeenden_ActionPerformed(e); }
}));
/************************/
/* Untermenü Bearbeiten */
/************************/
jMB.add( jMenu = new myJMenu("%Bearbeiten"));
jMenu.add( jMenuItemBAnleg = (jMenu2 = new myJMenu("%Anlegen von", false)));
jMenu2.add( new myJMenuItem("%Plätzen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemPlatzNeu_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Transitionen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemTransitionNeu_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Kanten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemKanteNeu_ActionPerformed(e); }
}));
jMenu.add( jMenuItemBEntf = (jMenu2 = new myJMenu("Ent%fernen von", false)));
jMenu2.add( new myJMenuItem("%Plätzen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemPlatzEntfernen_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Transitionen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemTransitionEntfernen_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Kanten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemKanteEntfernen_ActionPerformed(e); }
}));
jMenu.add( jMenuItemBEigen = new myJMenuItem("%Eigenschaften", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemEigenschaften_ActionPerformed(e); }
}, false));
/************************/
/* Untermenü Ansicht */
jMB.add( jMenu = new myJMenu("%Ansicht"));
jMenu.add( jMenuItemAVergr = new myJMenuItem("Netz %Vergrößern", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemAnsichtNetzVergroessern_ActionPerformed(e); }
}, false));
jMenu.addSeparator();
jMenu.add( jMenuItemAMatrR = new myJMenuItem("Matrizen %Rechts", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemAnsichtMatrizenRechts_ActionPerformed(e); }
}, false, false));
jMenu.add( jMenuItemAMatrU = new myJMenuItem("Matrizen %Unten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemAnsichtMatrizenUnten_ActionPerformed(e); }
}, false, false));
MatrizenSindRechts = false;
/************************/
/* Untermenü Simulation */
jMB.add( jMenu = new myJMenu("%Simulation"));
jMenu.add( jMenuItemSimBeg = new myJMenuItem("%Starten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemSimulationStarten_ActionPerformed(e); }
}, false));
jMenu.add( jMenuItemSimEnde = new myJMenuItem("%Beenden", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemSimulationBeenden_ActionPerformed(e); }
}, false));
/************************/
/* Untermenü Beispiele */
jMB.add( jMenu = new myJMenu("B%eispiele"));
jMenu.add( new myJMenuItem("Netz %1", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemBeispieleNetz1_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("Netz %2", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemBeispieleNetz2_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("Netz %3", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemBeispieleNetz3_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("Netz %4", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemBeispieleNetz4_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("Netz %5", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemBeispieleNetz5_ActionPerformed(e); }
}));
/************************/
/* Untermenü Hilfe */
jMB.add( jMenu = new myJMenu("%Hilfe"));
jMenu.add( new myJMenuItem("%Erläuterungen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemHilfeErlaeuterungen_ActionPerformed(e); }
}));
jMenu.add( new myJMenuItem("%Definitionen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemHilfeDefinitionen_ActionPerformed(e); }
}));
jMenu.addSeparator();
jMenu.add( new myJMenuItem("%Info", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemHilfeInfo_ActionPerformed(e); }
}));
return jMB;
}//createMenu
/***************************************************/
/* weiterer funktioneller Teil */
/***************************************************/
private boolean NetzSpeichernUnter() {
if (JFileChooser.APPROVE_OPTION==dateiDialog.showSaveDialog(this)) {
repaint();
return NetzSpeichern(dateiDialog.getSelectedFile().getPath(), true);
}
return false;
}//NetzSpeichernUnter
private boolean NetzSpeichern(String dateiname, boolean ueberschreibenBestaetigen) {
try {
File Datei = new File (dateiname); //anlegen eines Datei-Objektes mit entsprechendem dateiname
if (Datei.exists()) { //eine Datei (bzw. ein Objekt) mit diesem Namen existiert bereits
if (!Datei.isFile()) //ist es keine Datei?
throw new PetriNetzSpeichernException("Das Zeilobjekt [" + dateiname + "] ist keine Datei!");
if (!Datei.canWrite()) //ist es schreibgeschützt?
throw new PetriNetzSpeichernException("Die Zieldatei [" + dateiname + "] ist schreibgeschützt!");
//Datei existiert und ist nicht schreibgeschützt
//vom Benutzer Überscheiben Bestätigen lassen: (außer bei Datei|Speichern)
if (ueberschreibenBestaetigen) {
switch( Mitteilung( "Datei [" + dateiname + "] existiert bereits!
Soll sie überschreiben werden?",
"Speichern", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE) ){
case JOptionPane.YES_OPTION: //Weitermachen und Datei überschreiben
break;
case JOptionPane.NO_OPTION: //nach neuem DateiNamen fragen
menuItemDateiSpeichernUnter_ActionPerformed(null);
return false;
case JOptionPane.CANCEL_OPTION: //Speichern Abbrechen
default:
return false;
}
}
} else { //KEINE Datei/Objekt mit diesem Namen existiert bereits
File parentdir = parentDir(Datei);
if (!parentdir.exists()) throw new PetriNetzSpeichernException(
"Verzeichnis der Datei [" + dateiname + "] existiert nicht!");
if (!parentdir.canWrite()) throw new PetriNetzSpeichernException(
"Verzeichnis der Datei [" + dateiname + "] ist schreibgeschützt!");
}
//nun sind alle Eventualitäten ausgeschlossen!
if (!gefNetz.Speichern(Datei)) throw new PetriNetzSpeichernException(
"Beim Schreiben in die Datei [" + dateiname + "] ist ein unbekannter Fehler aufgetreten!");
jStatusBar.setText("Das Netz wurde in der Datei [" + dateiname + "] erfolgreich gespeichert.");
return true;
} catch (PetriNetzSpeichernException ex) {
Mitteilung( "Beim Speichern ist folgender Fehler aufgetreten:
"+ ex.getMessage(),
"Speichern misslungen", ABBRUCH_OPTION, JOptionPane.ERROR_MESSAGE);
jStatusBar.setText("Fehler beim Speichern!");
} catch (IOException ex) {
Mitteilung( "Beim Speichern ist folgender Fehler aufgetreten:
"+ ex.getMessage(),
"Speichern misslungen", ABBRUCH_OPTION, JOptionPane.ERROR_MESSAGE);
jStatusBar.setText("Fehler beim Speichern!");
}
return false;
}//NetzSpeichern
private boolean NetzLaden(String dateiname) {
try {
File Datei = new File (dateiname); //anlegen eines Datei-Objektes mit entsprechendem dateiname
if (!Datei.exists()) throw new PetriNetzLadenException("Die Zieldatei [" + dateiname + "] existiert nicht!");
if (!Datei.isFile()) throw new PetriNetzLadenException("Das Zielobjekt [" + dateiname + "] ist keine Datei!");
if (!Datei.canRead()) throw new PetriNetzLadenException("Die Zieldatei [" + dateiname + "] kann nicht gelesen werden!");
//nun sind alle Eventualitäten ausgeschlossen!
//Objekt existiert, ist Datei und lesbar
if (!gefNetz.Laden(Datei)) throw new PetriNetzLadenException("Beim Lesen der Datei [" + dateiname + "] ist ein unbekannter Fehler aufgetreten!");
jStatusBar.setText("Das Netz wurde aus der Datei [" + dateiname + "] erfolgreich gelesen.");
return true;
} catch (PetriNetzLadenException ex) {
Mitteilung( "Beim Laden ist folgender Fehler aufgetreten:
"+ ex.getMessage(),
"Laden misslungen", ABBRUCH_OPTION, JOptionPane.ERROR_MESSAGE);
jStatusBar.setText("Fehler beim Laden!");
} catch (IOException ex) {
Mitteilung( "Beim Laden ist folgender Fehler aufgetreten:
"+ ex.getMessage(),
"Laden misslungen", ABBRUCH_OPTION, JOptionPane.ERROR_MESSAGE);
jStatusBar.setText("Fehler beim Laden!");
}
return false;
}//NetzLaden
private boolean AenderungenVerwerfen() { //wenn aktuelles Netz überschrieben wird, vorher nachfragen ob das passieren soll
if (!gefNetz.getVeraendert()) return true;
switch( Mitteilung( "Änderungen am aktuellen Netz speichern?",
"Aenderungen Speichern?", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE) ){
case JOptionPane.YES_OPTION:
if (gefNetz.hatDateiName()) return NetzSpeichern(gefNetz.getDateiName(), true);
else return NetzSpeichernUnter(); // ja, Änderungen speichern
//(also wenn Speichern erfolgreich true, sonst abbrechen mit false)
case JOptionPane.NO_OPTION:
return true; // nein, Änderungen verwerfen (also true zurückgeben ohne Speichern)
case JOptionPane.CANCEL_OPTION:
default:
return false; // Abbrechen
}
}//AenderungenVerwerfen
private static File parentDir(File f) {//gibt uebergeordnetes Objekt im Pfad von f zurück
String dirname = f.getParent();
if( dirname==null ){
if (f.isAbsolute()) return new File(File.separator);
else return new File(System.getProperty("user.dir"));
} else return new File(dirname);
}//parentDir
// Anzeige des Dateinamens und des Geändert-Status in der Titelleiste der Anwendung
protected void aktualisiereTitel(String DateiNameTitel) {
setTitle( new String("Petrinetz: gefaerbte Marken - [" + DateiNameTitel + "]"));
}//aktualisiereTitel
//Beenden soll auch mit Kontextmenü/Rahmenelementen des Fensters möglich sein
public void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
if (AenderungenVerwerfen()) System.exit(0);
else return;
//sonst Abbrechen
}
super.processWindowEvent(e);
}//processWindowEvent
/***************************************************/
/* MouseEvents
linke Taste InputEvent.BUTTON1_MASK
mittlere Taste InputEvent.BUTTON2_MASK
rechte Taste InputEvent.BUTTON3_MASK
*/
/***************************************************/
private class MyMouseListener implements MouseListener, MouseMotionListener {
public void mouseClicked(MouseEvent e) {
if( gefNetz.istModusEingabe() ) checkPopupMenuEingabe(e);
else if( gefNetz.istModusSimulation() ) checkPopupMenuSimul(e);
if( e.isConsumed() ) return;
if( (e.getModifiers() & e.BUTTON1_MASK) == e.BUTTON1_MASK ){ //linke Maustaste
Point mausKlickPkt = e.getPoint();
KlickBehandlung: {
int objektTyp = gefNetz.getObjektTyp( mausKlickPkt);
if( gefNetz.istModusEingabe() ){
if( maus.istStatus( Maus.STATUS.PLATZ_ANLEG) ){ //PlatzAnlegen
Platz ePlatz;
if( (ePlatz = gefNetz.PlatzAnlegen( mausKlickPkt)) != null ){
e.consume();
(new PlatzDialog( ePlatz)).show();
repaint();
}
} else if( maus.istStatus( Maus.STATUS.PLATZ_ENTF) && (objektTyp==Netz.TYP_PLATZ) ){ //PlatzEntfernen
if( gefNetz.PlatzEntfernen( mausKlickPkt) ) e.consume();
} else if( maus.istStatus( Maus.STATUS.TRANS_ANLEG) ){ //TransitionAnlegen
Transition eTrans;
if( (eTrans = gefNetz.TransitionAnlegen( mausKlickPkt)) != null ){
e.consume();
(new TransDialog( eTrans)).show();
repaint();
}
} else if( maus.istStatus( Maus.STATUS.TRANS_ENTF) && (objektTyp==Netz.TYP_TRANS) ){ //TransitionEntfernen
if( gefNetz.TransitionEntfernen( mausKlickPkt) ) e.consume();
} else if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) ){ //KanteAnlegen
if( maus.KanteKlickenStartPkt!=null ) { //Klick-Variante der Kanteneingabe
Kante eKante;
if( (eKante = gefNetz.KanteAnlegen( maus.KanteKlickenStartPkt, mausKlickPkt)) != null ){
e.consume();
Dialog dialog = new KanteDialog( eKante);
dialog.show();
repaint();
}
maus.KanteKlickenStartPkt = null;
repaint();
} else if( (objektTyp==Netz.TYP_PLATZ) || (objektTyp==Netz.TYP_TRANS) ){
if( (maus.KanteKlickenStartPkt = gefNetz.getObjekt(mausKlickPkt).getMittelPkt()) != null ) e.consume();
}
} else if( maus.istStatus( Maus.STATUS.KANTE_ENTF) && (objektTyp==Netz.TYP_KANTE) ){ //KanteEntfernen
if( gefNetz.KanteEntfernen( mausKlickPkt) ) e.consume();
}
if( !e.isConsumed() && (e.getClickCount()>=2) && (objektTyp!=Netz.TYP_NICHTDEF)){ //Eigenschaften ändern
PN_Knoten pn = gefNetz.getObjekt(mausKlickPkt);
if( pn==null ){
jStatusBar.setText("Kein gültiges Objekt zum Ändern von Eigenschaften gefunden!");
break KlickBehandlung;
}
switch( objektTyp) {
case Netz.TYP_PLATZ:
gefNetz.PlatzMarkieren( mausKlickPkt);
(new PlatzDialog( (Platz)pn)).show();
break;
case Netz.TYP_TRANS:
gefNetz.TransitionMarkieren( mausKlickPkt);
(new TransDialog( (Transition)pn)).show();
break;
case Netz.TYP_KANTE:
gefNetz.NichtsMarkieren();
(new KanteDialog( (Kante)pn)).show();
break;
default:
break KlickBehandlung;
}
e.consume();
repaint();
}
} else if( maus.istStatus( Maus.STATUS.SIMULATION) ){ //Simulationsmodus
if( objektTyp==Netz.TYP_TRANS ) {
if( gefNetz.TransitionSchalten( mausKlickPkt) ) e.consume();
}
} else {
}
}//KlickBehandlung
} else if( (e.getModifiers() & e.BUTTON2_MASK) == e.BUTTON2_MASK ){ //mittlere Maustaste
} else if( (e.getModifiers() & e.BUTTON3_MASK) == e.BUTTON3_MASK ){ //rechte Maustaste
}
}//mouseClicked
public void mousePressed(MouseEvent e) {
if( gefNetz.istModusEingabe() ) checkPopupMenuEingabe(e);
else if( gefNetz.istModusSimulation() ) checkPopupMenuSimul(e);
if( e.isConsumed() ) return;
if( (e.getModifiers() & e.BUTTON1_MASK) == e.BUTTON1_MASK ){ //linke Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() ){
maus.ZiehtObjekt = null;
if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) ){
switch( gefNetz.getObjektTyp( p) ){
case Netz.TYP_PLATZ:
case Netz.TYP_TRANS:
if( (maus.KanteZiehenStartPkt = gefNetz.getObjekt( p).getMittelPkt()) != null ) e.consume();
break;
default:
maus.KanteZiehenStartPkt = null;
}
}
}
maus.LetztesLPress = p;
} else if( (e.getModifiers() & e.BUTTON2_MASK) == e.BUTTON2_MASK ){ //mittlere Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() ){
maus.ZiehtObjekt = null;
}
maus.LetztesMPress = p;
} else if( (e.getModifiers() & e.BUTTON3_MASK) == e.BUTTON3_MASK ){ //rechte Maustaste
}
}//mousePressed
public void mouseReleased(MouseEvent e) {
if( gefNetz.istModusEingabe() ) checkPopupMenuEingabe(e);
else if( gefNetz.istModusSimulation() ) checkPopupMenuSimul(e);
if( e.isConsumed() ) return;
if( (e.getModifiers() & e.BUTTON1_MASK) == e.BUTTON1_MASK ){ //linke Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() ){
if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) ){
if( maus.KanteZiehenStartPkt!=null ){
switch( gefNetz.getObjektTyp(p) ){
case Netz.TYP_PLATZ:
case Netz.TYP_TRANS:
Kante eKante;
if( (eKante = gefNetz.KanteAnlegen( maus.KanteZiehenStartPkt, p)) != null ){
e.consume();
(new KanteDialog( eKante)).show();
repaint();
}
default:
}
repaint();
}
}
maus.aktualisiereMausZeiger();
}
//mausLetztesRelease = p;
maus.KanteZiehenStartPkt = null;
maus.ZiehtObjekt = null;
} else if( (e.getModifiers() & e.BUTTON2_MASK) == e.BUTTON2_MASK ){ //mittlere Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() ){
maus.aktualisiereMausZeiger();
}
//mausLetztesRelease = p;
maus.KanteZiehenStartPkt = null;
maus.ZiehtObjekt = null;
} else if( (e.getModifiers() & e.BUTTON3_MASK) == e.BUTTON3_MASK ){ //rechte Maustaste
}
}//mouseReleased
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseDragged(MouseEvent e) {
if( (e.getModifiers() & e.BUTTON1_MASK) == e.BUTTON1_MASK ){ //linke Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() )
if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) )
if( maus.KanteZiehenStartPkt!=null ){
gefNetz.paint( gefNetz.getGraphics());
gefNetz.getGraphics().drawLine( maus.KanteZiehenStartPkt.x, maus.KanteZiehenStartPkt.y, p.x, p.y);
e.consume();
} else;
else {
maus.setMausZeiger( Maus.ZEIGER.SCHIEBEN);
if( maus.ZiehtObjekt==null )
switch( gefNetz.getObjektTyp(p) ){
case Netz.TYP_PLATZ:
if( (maus.ZiehtObjekt = gefNetz.PlatzVerschieben( maus.LetztesLPress, p)) != null ) e.consume();
break;
case Netz.TYP_TRANS:
if( (maus.ZiehtObjekt = gefNetz.TransitionVerschieben( maus.LetztesLPress, p)) != null ) e.consume();
break;
default:
}
else
if( maus.ZiehtObjekt.isKlasse("Platz") ){
if( gefNetz.PlatzVerschieben( (Platz)maus.ZiehtObjekt, p) != null ) e.consume();
} else {
if( gefNetz.TransitionVerschieben( (Transition)maus.ZiehtObjekt, p) != null ) e.consume();
}
}
} else if( (e.getModifiers() & e.BUTTON2_MASK) == e.BUTTON2_MASK ){ //mittlere Maustaste
Point p = e.getPoint();
if( gefNetz.istModusEingabe() )
if( !maus.istStatus( Maus.STATUS.SIMULATION) ){
maus.setMausZeiger( Maus.ZEIGER.SCHIEBEN);
if( maus.ZiehtObjekt==null )
switch( gefNetz.getObjektTyp(p) ){
case Netz.TYP_PLATZ:
if( (maus.ZiehtObjekt = gefNetz.PlatzVerschieben( maus.LetztesMPress, p)) != null ) e.consume();
break;
case Netz.TYP_TRANS:
if( (maus.ZiehtObjekt = gefNetz.TransitionVerschieben( maus.LetztesMPress, p)) != null ) e.consume();
break;
default:
}
else
if( maus.ZiehtObjekt.isKlasse("Platz") ){
if( gefNetz.PlatzVerschieben( (Platz)maus.ZiehtObjekt, p) != null ) e.consume();
} else {
if( gefNetz.TransitionVerschieben( (Transition)maus.ZiehtObjekt, p) != null ) e.consume();
}
}
} else if( (e.getModifiers() & e.BUTTON3_MASK) == e.BUTTON3_MASK ){ //rechte Maustaste
}
}//mouseDragged
public void mouseMoved(MouseEvent e) {
if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) ){
if( maus.KanteKlickenStartPkt!=null ){
gefNetz.paint( gefNetz.getGraphics());
gefNetz.getGraphics().drawLine( maus.KanteKlickenStartPkt.x, maus.KanteKlickenStartPkt.y, e.getX(), e.getY());
}
}
}//mouseMoved
}//MouseMenu
private void createPopupSimul() {
if( popupSimul==null ){
popupSimul = new JPopupMenu();
popupSimul.add( new myJMenuItem("%Simulation beenden", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemSimulationBeenden_ActionPerformed(e); }
}));
}
}//createPopupSimul
private void checkPopupMenuSimul(MouseEvent event) {
if (event.isPopupTrigger()) {
maus.setMausZeiger( Maus.ZEIGER.NORMAL);
createPopupSimul();
popupSimul.show( event.getComponent(), event.getX(), event.getY());
}
}//checkPopupMenuSimul
private void createPopupEingabe() {
if( popupEingabe==null ){
popupEingabe = new JPopupMenu();
JMenu jMenu2;
popupEingabe.add( jMenu2 = new myJMenu("%Anlegen von"));
jMenu2.add( new myJMenuItem("%Plätzen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemPlatzNeu_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Transitionen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemTransitionNeu_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Kanten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemKanteNeu_ActionPerformed(e); }
}));
popupEingabe.add( jMenu2 = new myJMenu("Ent%fernen von"));
jMenu2.add( new myJMenuItem("%Plätzen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemPlatzEntfernen_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Transitionen", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemTransitionEntfernen_ActionPerformed(e); }
}));
jMenu2.add( new myJMenuItem("%Kanten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemKanteEntfernen_ActionPerformed(e); }
}));
popupEingabe.add( new myJMenuItem("%Eigenschaften", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemEigenschaften_ActionPerformed(e); }
}));
popupEingabe.addSeparator();
popupEingabe.add( new myJMenuItem("%Simulation starten", new ActionListener() {
public void actionPerformed(ActionEvent e) { menuItemSimulationStarten_ActionPerformed(e); }
}));
}
}//createPopupEingabe
private void checkPopupMenuEingabe(MouseEvent event) {
if (event.isPopupTrigger()) {
maus.setMausZeiger( Maus.ZEIGER.NORMAL);
createPopupEingabe();
popupEingabe.show( event.getComponent(), event.getX(), event.getY());
}
}//checkPopupMenuEingabe
protected class Maus {
private int status;
private int zeigerTyp;
private boolean behandlungInstalliert;
private MyMouseListener ereignisbehandlung;
private Point LetztesLPress = null;
private Point LetztesMPress = null;
//private static Point LetztesRelease = null; bisher ohne Verwendung
private PN_Knoten ZiehtObjekt = null;
private Point KanteZiehenStartPkt = null;
private Point KanteKlickenStartPkt = null;
public class STATUS {
public static final int NICHTS = 0;
public static final int PLATZ_ANLEG = 1;
public static final int PLATZ_ENTF = 2;
public static final int TRANS_ANLEG = 4;
public static final int TRANS_ENTF = 8;
public static final int KANTE_ANLEG = 16;
public static final int KANTE_ENTF = 32;
public static final int EIGENSCHAFTEN = 64;
public static final int SIMULATION = 128;
private static final int ANLEG = PLATZ_ANLEG | TRANS_ANLEG | KANTE_ANLEG;
private static final int ENTF = PLATZ_ENTF | TRANS_ENTF | KANTE_ENTF;
//public static final int = ;
}
public class ZEIGER {
public static final int NORMAL = 0;
public static final int ZIELEN = 1;
public static final int SCHIEBEN = 2;
}
public Maus() {
status = STATUS.NICHTS;
zeigerTyp = ZEIGER.NORMAL;
setCursor( new Cursor(Cursor.DEFAULT_CURSOR));
behandlungInstalliert = false;
ereignisbehandlung = new MyMouseListener();
}
protected void setEreignisBehandlung(boolean enable) {
if( enable && !behandlungInstalliert ){
zeichenflaeche.addMouseListener( ereignisbehandlung);
zeichenflaeche.addMouseMotionListener( ereignisbehandlung);
behandlungInstalliert = true;
} else if( !enable && behandlungInstalliert ){
zeichenflaeche.addMouseListener( ereignisbehandlung);
zeichenflaeche.addMouseMotionListener( ereignisbehandlung);
behandlungInstalliert = false;
}
}//setEreignisBehandlung
protected boolean istStatus(int testwert) {
if( testwert == STATUS.NICHTS ) return status == STATUS.NICHTS;
return (status & testwert) != STATUS.NICHTS;
}//istStatus
protected void setStatus(int neuerWert) {
status = neuerWert;
if( (neuerWert & STATUS.ANLEG ) != STATUS.NICHTS ) {
gefNetz.NichtsMarkieren();
setMausZeiger( ZEIGER.ZIELEN);
} else if( (neuerWert & (STATUS.ENTF | STATUS.EIGENSCHAFTEN | STATUS.SIMULATION)) != STATUS.NICHTS) {
gefNetz.NichtsMarkieren();
setMausZeiger( ZEIGER.NORMAL);
//} else if( (neuerWert & ) == ) {
} else { /* NICHTS */
}
jStatusBar.setText("");
}//setStatus
protected void aktualisiereMausZeiger() {
if( (status & STATUS.ANLEG) != STATUS.NICHTS ) {
setMausZeiger( ZEIGER.ZIELEN);
} else if( (status & (STATUS.ENTF | STATUS.EIGENSCHAFTEN | STATUS.SIMULATION)) != STATUS.NICHTS) {
setMausZeiger( ZEIGER.NORMAL);
} else { /* NICHTS */
setMausZeiger( ZEIGER.NORMAL);
}
}//aktualisiereMausZeiger
protected boolean setMausZeiger(int neuerZeigerTyp) {
if( neuerZeigerTyp==zeigerTyp ) return true;
switch( neuerZeigerTyp ){
case ZEIGER.NORMAL:
setCursor( new Cursor(Cursor.DEFAULT_CURSOR));
break;
case ZEIGER.ZIELEN:
setCursor( new Cursor(Cursor.CROSSHAIR_CURSOR));
break;
case ZEIGER.SCHIEBEN:
setCursor( new Cursor(Cursor.MOVE_CURSOR));
break;
default:
return false;
}
zeigerTyp = neuerZeigerTyp;
return true;
}
}//Klasse: MausStatus
/*************************************************************************/
/* ActionEvent-Funktionen für sämtliche (Haupt)-Menü-Einträge */
/*************************************************************************/
public void menuItemDateiNeu_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
neuDialog.show();
if (gefNetz.istGueltigeFarbanzahl( neuDialog.FarbAnzahl)) {
repaint();
gefNetz.NeuesNetz(Netz.MODUS_EINGABE, neuDialog.FarbAnzahl);
jStatusBar.setText("Ein neues Netz mit "+ neuDialog.FarbAnzahl+ " Farben wurde angelegt.");
} else jStatusBar.setText("Erstellen eines neuen Netzes wurde abgebrochen!");
repaint();
}//menuItemDateiNeu_ActionPerformed
public void menuItemDateiOeffnen_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
// mit dem Öffnen-Teil des dateiDialog den Namen der Datei erfragen
// (wenn Benutzer abbricht, wird nicht geladen, altes Netz bleibt)
if (JFileChooser.APPROVE_OPTION == dateiDialog.showOpenDialog(this)) {
repaint();
// Laden des Netzes aus Datei (für Konsistenz bei Fehlern wird dort gesorgt!)
NetzLaden( dateiDialog.getSelectedFile().getPath());
}
repaint();
}//menuItemDateiOeffnen_ActionPerformed
public void menuItemDateiSchliessen_ActionPerformed(ActionEvent e) {
String alterdateiname;
if (!AenderungenVerwerfen()) return; //Abbrechen
if (gefNetz.hatDateiName()) alterdateiname = gefNetz.getDateiName();
else alterdateiname = "Unbenannt";
gefNetz.NeuesNetz(Netz.MODUS_NICHTS);
jStatusBar.setText("Das Netz aus Datei [" + alterdateiname + "] wurde geschlossen.");
repaint();
}//menuItemDateiSchliessen_ActionPerformed
public void menuItemDateiSpeichern_ActionPerformed(ActionEvent e) {
if (!gefNetz.hatDateiName()) {
NetzSpeichernUnter();
} else {
NetzSpeichern(gefNetz.getDateiName(), false);
}
repaint();
}//menuItemDateiSpeichern_ActionPerformed
public void menuItemDateiSpeichernUnter_ActionPerformed(ActionEvent e) {
NetzSpeichernUnter();
repaint();
}//menuItemDateiSpeichernUnter_ActionPerformed
public void menuItemDateiBeenden_ActionPerformed(ActionEvent e) {
if (AenderungenVerwerfen()) System.exit(0); //sonst Abbrechen von Beenden
}//menuItemDateiBeenden_ActionPerformed
/*********************************************************************/
/* Behandlung der Bearbeiten- & KontextMenü-Einträge */
/*********************************************************************/
public void menuItemPlatzNeu_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.PLATZ_ANLEG);
repaint();
}//menuItemPlatzNeu_ActionPerformed
public void menuItemPlatzEntfernen_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.PLATZ_ENTF);
repaint();
}//menuItemPlatzEntfernen_ActionPerformed
public void menuItemTransitionNeu_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.TRANS_ANLEG);
repaint();
}//menuItemTransitionNeu_ActionPerformed
public void menuItemTransitionEntfernen_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.TRANS_ENTF);
repaint();
}//menuItemTransitionEntfernen_ActionPerformed
public void menuItemKanteNeu_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.KANTE_ANLEG);
jStatusBar.modusInfo("Kanten-Anlegen: Maus von Knoten zu Knoten, ziehen oder nacheinander anklicken");
repaint();
}//menuItemKanteNeu_ActionPerformed
public void menuItemKanteEntfernen_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.KANTE_ENTF);
repaint();
}//menuItemKanteEntfernen_ActionPerformed
public void menuItemEigenschaften_ActionPerformed(ActionEvent e) {
maus.setStatus( Maus.STATUS.EIGENSCHAFTEN);
jStatusBar.modusInfo("Eigenschaften-Ändern: Doppelklicken");
repaint();
}//menuEinstellungen_ActionPerformed
public void menuItemAnsichtMatrizenRechts_ActionPerformed(ActionEvent e) {
jMenuItemAMatrU.setVisible( true);
jMenuItemAMatrR.setVisible( false);
MatrizenSindRechts = true;
if( KanteMatrixUN.isVisible() ){ KanteMatrixRE.setVisible( true); KanteMatrixUN.setVisible( false); }
if( PlatzMatrixUN.isVisible() ){ PlatzMatrixRE.setVisible( true); PlatzMatrixUN.setVisible( false); }
MatrizenRE.setVisible( true);
MatrizenUN.setVisible( false);
}//menuItemAnsichtMatrizenRechts_ActionPerformed
public void menuItemAnsichtMatrizenUnten_ActionPerformed(ActionEvent e) {
jMenuItemAMatrR.setVisible( true);
jMenuItemAMatrU.setVisible( false);
MatrizenSindRechts = false;
if( KanteMatrixRE.isVisible() ){ KanteMatrixUN.setVisible( true); KanteMatrixRE.setVisible( false); }
if( PlatzMatrixRE.isVisible() ){ PlatzMatrixUN.setVisible( true); PlatzMatrixRE.setVisible( false); }
MatrizenUN.setVisible( true);
MatrizenRE.setVisible( false);
}//menuItemAnsichtMatrizenUnten_ActionPerformed
public void menuItemAnsichtNetzVergroessern_ActionPerformed(ActionEvent e) {
gefNetz.Vergroessern( Netz.KOMPONENTEN_ABSTAND, Netz.KOMPONENTEN_ABSTAND, Netz.KOMPONENTEN_ABSTAND, Netz.KOMPONENTEN_ABSTAND);
}//menuItemAnsichtNetzVergroessern_ActionPerformed
public void menuItemSimulationStarten_ActionPerformed(ActionEvent e) {
gefNetz.setModus(Netz.MODUS_SIMULATION);
maus.setStatus( Maus.STATUS.SIMULATION);
gefNetz.TransitionenTestSchalten(); //schaltfaehige Transitionen markieren
jStatusBar.setText("...gestartet");
}//menuItemSimulationStarten_ActionPerformed
public void menuItemSimulationBeenden_ActionPerformed(ActionEvent e) {
gefNetz.setModus(Netz.MODUS_EINGABE);
maus.setStatus( Maus.STATUS.NICHTS);
gefNetz.TransitionenEndeSchalten();
jStatusBar.setText("Simulation beendet.");
}//menuItemSimulationBeenden_ActionPerformed
public void menuItemBeispieleNetz1_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
if( NetzLaden("BspNetz1.pngm") ) jStatusBar.setText("Beispiel Netz 1 geladen.");// Laden der Beispiel-Datei
else jStatusBar.setText("Probleme beim Laden der Datei des Beispiel Netzes 1!");
repaint();
}//menuItemBeispielNetz1_ActionPerformed
public void menuItemBeispieleNetz2_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
if( NetzLaden("BspNetz2.pngm") ) jStatusBar.setText("Beispiel Netz 2 geladen.");// Laden der Beispiel-Datei
else jStatusBar.setText("Probleme beim Laden der Datei des Beispiel Netzes 2!");
repaint();
}//menuItemBeispielNetz2_ActionPerformed
public void menuItemBeispieleNetz3_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
if( NetzLaden("BspNetz3.pngm") ) jStatusBar.setText("Beispiel Netz 3 geladen.");// Laden der Beispiel-Datei
else jStatusBar.setText("Probleme beim Laden der Datei des Beispiel Netzes 3!");
repaint();
}//menuItemBeispielNetz3_ActionPerformed
public void menuItemBeispieleNetz4_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
if( NetzLaden("BspNetz4.pngm") ) jStatusBar.setText("Beispiel Netz 4 geladen.");// Laden der Beispiel-Datei
else jStatusBar.setText("Probleme beim Laden der Datei des Beispiel Netzes 4!");
repaint();
}//menuItemBeispielNetz4_ActionPerformed
public void menuItemBeispieleNetz5_ActionPerformed(ActionEvent e) {
if (!AenderungenVerwerfen()) return; //Abbrechen
if( NetzLaden("BspNetz5.pngm") ) jStatusBar.setText("Beispiel Netz 5 geladen.");// Laden der Beispiel-Datei
else jStatusBar.setText("Probleme beim Laden der Datei des Beispiel Netzes 5!");
repaint();
}//menuItemBeispielNetz5_ActionPerformed
public void menuItemHilfeErlaeuterungen_ActionPerformed(ActionEvent e) {
hilfeDialog.show();
repaint();
}//menuItemHilfeErlaeuterungen_ActionPerformed
public void menuItemHilfeDefinitionen_ActionPerformed(ActionEvent e) {
defDialog.show();
repaint();
}//menuItemHilfeDefinitionen_ActionPerformed
public void menuItemHilfeInfo_ActionPerformed(ActionEvent e) {
infoDialog.show();
repaint();
}//menuItemHilfeInfo_ActionPerformed
/**************************************************/
/* lokale, wiederkehrende Methoden */
/**************************************************/
protected static int Mitteilung(String mitteilung, String titel, int mitteilungsTyp, Object[] buttonTexte, Object standardwert) {
JFrame p = null;
if( Petri.frame!=null ) p = Petri.frame;
return JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttonTexte, standardwert);
}
protected static int Mitteilung(String mitteilung, String titel, int option, int mitteilungsTyp) {
JFrame p = null;
if( Petri.frame!=null ) p = Petri.frame;
Object[] buttontexte;
int ergebnis;
switch( option) {
case JOptionPane.DEFAULT_OPTION:
buttontexte = new Object[] {"OK"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, buttontexte[0]);
if( ergebnis==0 ) return JOptionPane.OK_OPTION;
return ergebnis;
case JOptionPane.OK_CANCEL_OPTION:
buttontexte = new Object[] {"OK", "Abbrechen"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, null);
if( ergebnis==0 ) return JOptionPane.OK_OPTION;
if( ergebnis==1 ) return JOptionPane.CANCEL_OPTION;
return ergebnis;
case JOptionPane.YES_NO_CANCEL_OPTION:
buttontexte = new Object[] {"Ja", "Nein", "Abbrechen"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, null);
if( ergebnis==0 ) return JOptionPane.YES_OPTION;
if( ergebnis==1 ) return JOptionPane.NO_OPTION;
if( ergebnis==2 ) return JOptionPane.CANCEL_OPTION;
return ergebnis;
case JOptionPane.YES_NO_OPTION:
buttontexte = new Object[] {"Ja", "Nein"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, null);
if( ergebnis==0 ) return JOptionPane.YES_OPTION;
if( ergebnis==1 ) return JOptionPane.NO_OPTION;
return ergebnis;
case WEITER_OPTION:
buttontexte = new Object[] {"Weiter"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, buttontexte[0]);
if( ergebnis==0 ) return WEITER_OPTION;
return ergebnis;
case ABBRUCH_OPTION:
buttontexte = new Object[] {"Abbrechen"};
ergebnis = JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, JOptionPane.DEFAULT_OPTION,
mitteilungsTyp, null, buttontexte, buttontexte[0]);
if( ergebnis==0 ) return ABBRUCH_OPTION;
return ergebnis;
default:
return JOptionPane.showOptionDialog( p, ""+ mitteilung+ "", titel, option,
mitteilungsTyp, null, null, null);
}
}
protected class StatusZeile extends JLabel{
private String alterEinfacherText;
public void modusInfo(String info) {
setText(info);
alterEinfacherText = null;
}//modusInfo
public void setText(String text) {
String anfang = "";
if( (Petri.frame!=null) && (gefNetz!=null) ){
if( gefNetz.istModusEingabe() ){
anfang = "Eingabemodus";
if( maus.istStatus( Maus.STATUS.KANTE_ANLEG) ) anfang+= " | Kante anlegen";
if( maus.istStatus( Maus.STATUS.KANTE_ENTF) ) anfang+= " | Kante entfernen";
if( maus.istStatus( Maus.STATUS.PLATZ_ANLEG) ) anfang+= " | Platz anlegen";
if( maus.istStatus( Maus.STATUS.PLATZ_ENTF) ) anfang+= " | Platz entfernen";
if( maus.istStatus( Maus.STATUS.TRANS_ANLEG) ) anfang+= " | Transition anlegen";
if( maus.istStatus( Maus.STATUS.TRANS_ENTF) ) anfang+= " | Transition entfernen";
if( maus.istStatus( Maus.STATUS.EIGENSCHAFTEN) ) anfang += " | Eigenschaften ändern";
} else if( gefNetz.istModusSimulation() ) anfang = "Simulation";
else if( gefNetz.istModusNichts() ) anfang = "kein Netz";
}
if( (text.length()==0) && (alterEinfacherText!=null) ){
super.setText( "" + anfang+ " => "+ alterEinfacherText + "");
} else {
super.setText( "" + anfang+ " => "+ text + "");
alterEinfacherText = text;
}
}//setText
}//StatusZeile
}//PetriFrame
/*****************************************************************************/
/* Exception-Deklarationen */
/*****************************************************************************/
class PetriNetzSpeichernException extends IOException {
public PetriNetzSpeichernException(String botschaft) { super(botschaft); }
}//PetriNetzSpeichernException
class PetriNetzLadenException extends IOException {
public PetriNetzLadenException(String botschaft) { super(botschaft); }
}//PetriNetzLadenException