Text
OfenGUI.java
/* java de.unilog.hkw.gui.OfenGUI */ package de.unilog.hkw.gui;
import de.unilog.hkw.ofen.*;
import java.applet.Applet; import java.awt.*; import java.awt.event.*;
import javax.swing.JOptionPane;
/** * Applet für Heizkraftwerk * * Das Applet enthält ein MasterPanel mp mit BorderLayout Im Norden steht der * Name des Kunden im Süden die aktuelle Zeit in Form des DateLabels. Der Name * des Kunden wird mit einem großen Font dargestellt. * * Im Center ist das EingabePanel mit GridLayout Name und Passwort werden vom * Kunden eingegeben Mit come und go-Knöpfe werden Aktionen ausgelöst Die Events * werden an die jeweiligen inneren Listener-Klassen ComeListener und GoListener * delegiert. * * Es wird eine Feuerliste verwendet, in der sich alle brennbaren Elemente * befinden. Die Feuerliste wird in einem Choice-Control dargestellt. * * Durch come wird u.a. die Choice mit den Brennbaren Elementen aktiviert. Durch * den Knopf burn wird das selektierte Element verbrennt. Die Events des Knopfes * burns werden an den Listener BurnListener als innere Klasse delegiert. Der * Controller ruft die Methode load auf mit dem selktierten Element. * * Am Ende des Gui-Aufbaus in init() wird der Fokus für das erste Eingabefeld * (Name) angefordert. * * Das Applet soll auch eine main-Methode besitzen, so daß es auch als * StandAlone funktioniert, hierzu erzeugen wir einen Frame(Container) und fügen * eine Instanz des Applets(Component) hinzu. Dann simulieren wir die * Lebenszyklen durch den Browser * * hkw08: * Datum und Uhrzeit werden mittels Thread dynamisch aktualisiert. * Hierzu wird die Klasse DateLabel als erweiterung von Label und * implementierung von Runnable realisiert.. * * hkw09: * Die Benutzerautentifizierung und die Aktionen KOMMEN, GEHEN und VERBRENNEN * werden in der Datenbank 'ofen' in der Tabelle 'Ofenprotokoll' protokolliert. * * * * @version 2.6.107 krg */ public class OfenGUI extends Applet {
// GUI-Elemente private Label labelKunde, labelName, labelPassword; private TextField name, password; private Button come, go, burn; private Choice choiceBrennbar; // alt. JComboBox private static String txtTitle = "Heizkraftwerk INTEGRATA Stufe 9 DB"; private ConfigurableOfenController oc; private DbAccess dba;
// Frames private static Frame frame = null; private static Applet applet;
// ----------------------------------------------------------------------- /** * Dual Personality von Applet und Applikation. Hier wird ein Teil des * Browsers simuliert, der Applets darstellen kann. Ist das Attribut * frame!=null, so handelt es sich um eine standalone Applikation, ansonsten * um ein Applet */ public static void main(String[] args) {
// Ein Browser setzt noch den SecurityManager
frame = new Frame(txtTitle); applet = new OfenGUI(); applet.init(); applet.start(); frame.add(applet); frame.pack(); frame.setVisible(true); // frame.setResizable(false); centerFrame(frame);
/** * anonyme innere Klasse als WindowListener, schliesst die Anwendung */ frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { applet.stop(); applet.destroy(); System.exit(0); } // windowClosing() }); }
private static void centerFrame(Frame frame) { Toolkit tk = Toolkit.getDefaultToolkit(); Dimension size = tk.getScreenSize(); int sizeX = (int) size.getWidth(); int sizeY = (int) size.getHeight(); System.out.println("sizeX=" + sizeX + ", sizeY=" + sizeY); Dimension frameSize = frame.getSize(); int fsizeX = (int) frameSize.getWidth(); int fsizeY = (int) frameSize.getHeight(); frame.setLocation((sizeX / 2) - (fsizeX / 2), (sizeY / 2) - (fsizeY / 2)); }
// ----------------------------------------------------------------------- // OfenGUI Konstruktor (wir nicht benötigt) public OfenGUI() { System.out.println("OfenGUI Konstruktor"); }
/** * Die init()-Methode erzeugt die GUI-Elemente */ public void init() { System.out.println("OfenGUI.init"); oc = new ConfigurableOfenController(); setBackground(Color.decode("#eeeeff"));
// In das MasterPanel kommen Titel(North), Formular(Center) // und Uhrzeit(South) Panel mp = new Panel(); mp.setLayout(new BorderLayout());
labelKunde = new Label(txtTitle, Label.CENTER); labelKunde.setFont(new Font("Times New Roman", Font.PLAIN, 20));
// Das Formular erzeugen Panel ep = createEingabePanel();
// Die Uhr später als Thread realisieren //Date dl = new Date(); //Label lblDate = new Label(dl.toString()); // // Die Uhr als Thread DateLabel lblDate2 = new DateLabel(); new Thread(lblDate2).start();
// Die GUI-Elemente im BorderLayout anordnen mp.add(labelKunde, BorderLayout.NORTH); mp.add(ep, BorderLayout.CENTER); mp.add(lblDate2, BorderLayout.SOUTH);
// Das äußere FlowLayout ist nötig, damit sich das Formular // in der Größe nicht ändert beim resizen this.setLayout(new FlowLayout()); add(mp);
// Digitale Temperaturanzeige starten TempDisplay td = new TempDisplay(oc.getOfen()); // Datenbankverbindung herstellen dba = new DbAccess(); }
/** * Die start()-Methode des Applet-Frameworks */ public void start() { System.out.println("OfenGUI.start"); }
/** * Die stop()-Methode des Applet-Frameworks */ public void stop() { System.out.println("OfenGUI.stop"); }
/** * Die destroy-Methode des Applet-Frameworks */ public void destroy() { System.out.println("OfenGUI.destroy"); dba.dbClose(); }
// ----------------------------------------------------------------------- /** * Das Eingabe-Panel als eigenes Modul um es auch noch anderweitig verwenden * zu können. Bei dieser Erweiterung, sollte es aber gleich als eigene * Klasse realisiert werden. (-->src051) */ private Panel createEingabePanel() {
Panel ep = new Panel();
// zwei Labels labelName = new Label(" Identifikation :", Label.RIGHT); labelPassword = new Label(" Kennwort :", Label.RIGHT);
// zwei Eingabefelder name = new TextField(10); name.addTextListener(new DelimitorListener(10)); // maximal 10 // Zeichen password = new TextField(8); password.setEchoChar('*'); // Sterne für Passwort password.addTextListener(new DelimitorListener(8)); // maximal 8 Zeichen
// die drei Buttons come = new Button("kommen"); go = new Button("gehen"); go.setEnabled(false); burn = new Button("beladen"); burn.setEnabled(false);
choiceBrennbar = new Choice(); // Lade Brennelement-Kurzbezeichnungen in die Auswahl-Liste String[] feuerliste = oc.getBeKeys(); for (int i = 0; i < feuerliste.length; i++) { System.out.println(feuerliste[i]); choiceBrennbar.addItem(feuerliste[i]); }
choiceBrennbar.setEnabled(false); come.setForeground(Color.blue); go.setForeground(Color.blue);
// Wir wollen ein zellenförmiges Layout ep.setLayout(new GridLayout(7, 2, 10, 10));
ep.add(new Label()); ep.add(new Label()); // Abstand 2 dummies ep.add(labelName); ep.add(name); ep.add(labelPassword); ep.add(password); ep.add(come); ep.add(go); ep.add(new Label()); ep.add(new Label()); // Abstand 2 dummies ep.add(choiceBrennbar); ep.add(burn);
// Der Kunde soll gleich loslegen können name.requestFocus();
/* * EventHandler registrieren */ come.addActionListener(new ComeListener()); go.addActionListener(new GoListener()); burn.addActionListener(new BurnListener()); return ep; }
// ----------------------------------------------------------------------- // Dynamischer Teil der GUI: die Event-Handler -------------------------- // ----------------------------------------------------------------------- /** * ActionEvent: Button come Jemand meldet sich an der GUI an, indem er den * kommen-Knopf drückt. Der ComeListener aktiviert die anderen Knöpfe und * deaktiviert sich selbst. Die Uhrzeit der Anmeldung wird später * protokolliert. */ private class ComeListener implements ActionListener { public void actionPerformed(ActionEvent ae) { /* * Name und Kennwort überprüfen */ String username = name.getText(); if (dba.dbCheckUser(username, password.getText()) != true) { System.out.println("ComeListener(): falsche user/password Eingabe"); // Hier sollte ein Fehler-Dialogfenster angezeigt werden! name.selectAll(); name.requestFocus(); JOptionPane.showMessageDialog(frame, "Sie haben einen falschen Benutzername oder " + "ein falsches Kennwort eingegeben"); return; } come.setEnabled(false); go.setEnabled(true); burn.setEnabled(true); choiceBrennbar.setEnabled(true); dba.dbAktion(username, "kommen", new java.util.Date()); } }
/** * ActionEvent: Button go Jemand meldet sich an der GUI ab, indem er den * gehen-Knopf drückt. Der GoListener aktiviert den kommen-Knopf und * deaktiviert sich selbst. Die Uhrzeit der Anmeldung wird später * protokolliert. */ private class GoListener implements ActionListener { public void actionPerformed(ActionEvent ae) { come.setEnabled(true); go.setEnabled(false); burn.setEnabled(false); choiceBrennbar.setEnabled(false); dba.dbAktion(name.getText(), "gehen", new java.util.Date()); } }
// ----------------------------------------------------------------------- /** * ActionEvent: Button burn Der BurnListener übergibt das gewählte * Brennelement aus der GUI an die load Methode als String zusammen mit der * Uhrzeit. */ private class BurnListener implements ActionListener { public void actionPerformed(ActionEvent ae) { String brennelement = choiceBrennbar.getSelectedItem(); oc.verbrennen(brennelement); dba.dbAktion(name.getText(),"verbrenne " + brennelement, new java.util.Date()); } }
// ----------------------------------------------------------------------- /** * TextEvent: bei Änderung in den zwei Textfeldern Der DelimiterListener * sorgt dafür, dass bei einem TextFeld nur eine maximale Anzahl Zeichen * genutzt wird. */ private class DelimitorListener implements TextListener { private int limit;
public DelimitorListener(int value) { this.limit = value; }
public void textValueChanged(TextEvent te) { TextComponent tc = (TextComponent) te.getSource(); String line = tc.getText();
int pos = tc.getCaretPosition(); if (line.length() > limit) { tc.setText(line.substring(0, limit)); tc.setCaretPosition(pos); } // System.out.println(line); } }
}
0 notes
Text
DbAccess.java
package de.unilog.hkw.gui;
import java.text.*; import java.util.Properties; import java.io.IOException; import java.io.InputStream; import java.sql.*;
/** * Diese Klasse stellt Methoden für die OfenGUI zur Verfügung um die * Benutzeraktionen der User zu protokolieren und um eine Benutzer- * Autentifizierung durchzuführen. * * Die Aktionen KOMMEN, GEHEN und VERBRENNEN werden in der Datenbank * in der Tabelle OFENPROTOKOLL protokolliert. * * Bei der Aktion KOMMEN wird in der Datenbank-Tabelle PASSWORT für * den eingegebenen Namen das Kennwort überprüft. * * Es werden allgemeine Methoden für den Verbindungsaufbau * zur Datenbank und das Schliessen bereitgestellt. * * @version 2.6.107 krg hkw09 */ public class DbAccess {
//----------------------------------------------------------------------- // Default Datenbankzugriffs Attribute private String dbDriver = "com.mysql.jdbc.Driver"; private String dbURL = "jdbc:mysql://localhost/ofen"; private String dbUser = "root"; private String dbPwd = "unilog";
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); private Connection dbConn = null; private Statement dbStmt = null; /** * Die Verbindung zur Datenbank wird erzeugt und ein Statement-Objekt * für die SQL-Kommandos bereitgestellt. */ private void dbConnect() { this.readDbParameter(); if (dbConn != null) { System.out.println("dbConnect() dbConn=" + dbConn); return; } try { System.out.println("DB-Treiber laden"); Class.forName(dbDriver);
System.out.println(" getConnection(): URL=" + dbURL); dbConn = DriverManager.getConnection(dbURL, dbUser, dbPwd); dbStmt = dbConn.createStatement(); } catch (SQLException sqle) { System.out.println("dbConnect() SQLFehler: "+ sqle); } catch (Exception e) { System.out.println("dbConnect() DB-Treiber nicht ladbar: " + e); } }
/** * Die Verbindung zur Datenbank wird getrennt. */ public void dbClose() { System.out.println("dbCose()"); try { if (dbStmt != null) dbStmt.close(); if (dbConn != null) dbConn.close(); } catch(SQLException sqle) { System.out.println("dbClose() SQLFehler: "+ sqle); } finally { if (dbConn != null) { try {dbConn.close();} catch(Exception e) { /*ignore*/ }; } } dbConn = null; }
/** * Uhrzeit und Aktion (kommen, gehen, verbrennen) werden protokolliert. * Anschließend wird die Verbindung getrennt. */ public void dbAktion(String name, String action, java.util.Date date) { //Übung hkw09 }
/** * Überprüfung des Benutzer-Kennwortes. */ public boolean dbCheckUser(String user, String pwd) { boolean pwdOk = false; //Übung hkw09 return pwdOk; }
/** * */ private void readDbParameter() { final String PARAM_FILE = "DbParameter.properties"; InputStream is;
try { is = this.getClass().getResourceAsStream(PARAM_FILE); System.out.println("readDbParameter from " + PARAM_FILE + ": is=" + is); Properties props = new Properties(); props.load(is); is.close(); props.list(System.out); System.out.println("------------------------"); this.dbDriver = props.getProperty("dbDriver"); this.dbURL = props.getProperty("dbURL"); this.dbUser = props.getProperty("dbUser"); this.dbPwd = props.getProperty("dbPwd"); } catch(IOException pException){ System.out.println("Error reading properties from " + PARAM_FILE + ": " + pException.getMessage()); } }
public Connection getConnection(){ if (dbConn == null){ this.dbConnect(); } return dbConn; }
//========================================================================== // Test only public static void main(String[] args) { System.out.println("-- main: Test DbAccess"); DbAccess dba = new DbAccess(); boolean res = dba.dbCheckUser("gerhard", "kreutzer"); System.out.println("-- main: dbCheckUser=" + res); dba.dbAktion("gerhard", "testen", new java.util.Date()); System.out.println("-- main: End test "); } }
0 notes
Text
DBSetup.java
package de.unilog.hkw.util;
import java.sql.Connection; import java.sql.SQLException;
import de.unilog.hkw.gui.DbAccess;
public class DBSetup {
public static void main(String[] args) { DbAccess dba = new DbAccess(); Connection con = dba.getConnection(); try { java.sql.Statement s = con.createStatement(); s.execute("DROP TABLE MITARBEITER"); s.execute("DROP TABLE OFENPROTOKOLL"); s.execute("CREATE TABLE MITARBEITER (name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL)"); s.execute("CREATE TABLE OFENPROTOKOLL (name VARCHAR(20) NOT NULL, action VARCHAR(50) NOT NULL, " + "date TIMESTAMP)"); s.execute("INSERT INTO MITARBEITER VALUES ('markus', 'test')"); System.out.println("-- main: Test DbAccess"); boolean res = dba.dbCheckUser("markus", "test"); System.out.println("-- main: dbCheckUser=" + res); dba.dbAktion("markus", "test", new java.util.Date()); System.out.println("-- main: End test "); dba.dbClose(); } catch (SQLException sqle) { System.out.println("dbAktion() SQLFehler: " + sqle); sqle.printStackTrace(); }
}
}
0 notes
Text
DbParameter.properties
#------------------------------------------------------------------------------ # Parameterdatei fuer 3304 DB-Zugriff aus der Ofen-GUI # 1.0.048 krg 30.04.08 #------------------------------------------------------------------------------ #Parameter fuer MySQL #dbDriver=com.mysql.jdbc.Driver #dbURL=jdbc:mysql://localhost/ofen #dbUser=root #dbPwd=unilog #Parameter fuer HSQLDB dbDriver=org.hsqldb.jdbc.JDBCDriver dbURL=jdbc:hsqldb:file:testdb dbUser=sa dbPwd= #Parameter fuer MS Access #dbDriver=sun.jdbc.odbc.JdbcOdbcDriver #dbURL=jdbc:odbc:ofen #oder ohne DSN-Definition #dbURL=jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/_training/etc/ofen.mdb
0 notes
Text
DBSetup
package de.unilog.hkw.util;
import java.sql.Connection; import java.sql.SQLException;
import de.unilog.hkw.gui.DbAccess;
public class DBSetup {
public static void main(String[] args) { DbAccess dba = new DbAccess(); Connection con = dba.getConnection(); try { java.sql.Statement s = con.createStatement(); s.execute("DROP TABLE MITARBEITER"); s.execute("DROP TABLE OFENPROTOKOLL"); s.execute("CREATE TABLE MITARBEITER (name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL)"); s.execute("CREATE TABLE OFENPROTOKOLL (name VARCHAR(20) NOT NULL, action VARCHAR(50) NOT NULL, " + "date TIMESTAMP)"); s.execute("INSERT INTO MITARBEITER VALUES ('markus', 'test')"); System.out.println("-- main: Test DbAccess"); boolean res = dba.dbCheckUser("markus", "test"); System.out.println("-- main: dbCheckUser=" + res); dba.dbAktion("markus", "test", new java.util.Date()); System.out.println("-- main: End test "); dba.dbClose(); } catch (SQLException sqle) { System.out.println("dbAktion() SQLFehler: " + sqle); sqle.printStackTrace(); }
}
}
0 notes
Link
0 notes
Text
package de.yoleco.command;
import java.util.Stack;
public class Calculator { private int value; private Stack<CalculatorCommand> commands = new Stack<Calculator.CalculatorCommand>();
public void add(int operator){ AddCommand add = new AddCommand(operator); add.execute(this); commands.add(add); } public void output(){ System.out.println("Aktueller Wert:" + this.value); } public void undoLastCommand(){ while(true){ CalculatorCommand calculatorCommand = commands.pop(); if(calculatorCommand.canUndo()){ calculatorCommand.undo(this); break; } } } interface CalculatorCommand {
void execute(Calculator calculator); boolean canUndo(); void undo(Calculator calculator);
} class AddCommand implements CalculatorCommand {
private int addValue; public AddCommand(int addValue) { this.addValue = addValue; }
@Override public void execute(Calculator c) { c.value = c.value + addValue; }
@Override public boolean canUndo() { return true; }
@Override public void undo(Calculator c) { c.value = c.value - addValue; } } public static void main(String[] args) { Calculator calci = new Calculator(); calci.add(5); calci.add(10); calci.output(); calci.undoLastCommand(); calci.output(); } }
0 notes
Link
0 notes
Text
package de.unilog.example; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.Properties; public class ResourceAsStream { private static final String PATH = "de/unilog/config/test.properties"; public static void main(String[] args) { URL parentFolder = ResourceAsStream.class.getResource(""); System.out.println(parentFolder); InputStream stream = ResourceAsStream.class.getResourceAsStream("../config/test.properties"); InputStreamReader isr = new InputStreamReader(stream); BufferedReader br = new BufferedReader(isr); try { System.out.println(br.readLine()); } catch (IOException e) { e.printStackTrace(); } //jetzt über properties Properties props = new Properties(); try { //props.load(new FileReader(PATH)); props.load(ResourceAsStream.class.getResourceAsStream("../config/test.properties")); System.out.println(props.get("text")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
0 notes
Link
0 notes
Link
0 notes