diff --git a/TEST b/TEST new file mode 100644 index 0000000..e69de29 diff --git a/src/mvcgrafik/Start.java b/src/mvcgrafik/Start.java index 82a096b..61637ce 100755 --- a/src/mvcgrafik/Start.java +++ b/src/mvcgrafik/Start.java @@ -10,6 +10,7 @@ import javax.swing.JFrame; import javax.swing.WindowConstants; import mvcgrafik.controller.GrafikController; import mvcgrafik.model.GrafikModel; +import mvcgrafik.view.GrafikMenuView; import mvcgrafik.view.GrafikView; //import mvcgrafik.ohmLogger; @@ -23,14 +24,16 @@ public class Start { JFrame frm = new JFrame(); frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - GrafikView view = new GrafikView(); + + GrafikMenuView view = new GrafikMenuView(); GrafikModel model = new GrafikModel(); - view.setModel(model); + view.getGrafikView1().setModel(model); +// view.setModel(model); GrafikController controller = new GrafikController(view, model); controller.registerEvents(); - frm.setContentPane(view); - frm.setSize(800, 600); - frm.setVisible(true); + + view.setSize(800, 600); + view.setVisible(true); } diff --git a/src/mvcgrafik/controller/GrafikController.java b/src/mvcgrafik/controller/GrafikController.java index 0eea73c..85a6716 100755 --- a/src/mvcgrafik/controller/GrafikController.java +++ b/src/mvcgrafik/controller/GrafikController.java @@ -7,30 +7,40 @@ package mvcgrafik.controller; import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.prefs.Preferences; +import javax.swing.JFileChooser; import mvcgrafik.model.Figure; import mvcgrafik.model.GrafikModel; -import mvcgrafik.view.GrafikView; +import mvcgrafik.view.GrafikMenuView; +import mvcgrafik.logger.OhmLogger; + /** * * @author le */ -public class GrafikController implements MouseMotionListener, MouseListener, KeyListener +public class GrafikController implements MouseMotionListener, MouseListener, ActionListener { - private GrafikView view; + private GrafikMenuView view; + //private GrafikMenuView menuview; private GrafikModel model; private Figure figure; private Point p_old; + private static Logger lg = OhmLogger.getLogger(); - public GrafikController(GrafikView view, GrafikModel model) + public GrafikController(GrafikMenuView view, GrafikModel model) { this.view = view; this.model = model; @@ -40,14 +50,22 @@ public class GrafikController implements MouseMotionListener, MouseListener, Key { view.addMouseMotionListener(this); view.addMouseListener(this); + view.getBtnOpen().addActionListener(this); + view.getBtnSafe().addActionListener(this); } @Override public void mouseDragged(MouseEvent evt) { + if(figure == null) + { + lg.info("new Figure"); + figure = model.addFigure(); + } Point p = evt.getPoint(); if(p_old != null){ - view.drawLine(p, p_old); +// view.drawLine(p, p_old); + view.getGrafikView1().drawLine(p, p_old); } p_old = p; figure.addPoint(p); @@ -61,7 +79,7 @@ public class GrafikController implements MouseMotionListener, MouseListener, Key @Override public void mouseClicked(MouseEvent e) { - + lg.info("clicked"); figure = model.addFigure(); } @@ -74,10 +92,14 @@ public class GrafikController implements MouseMotionListener, MouseListener, Key @Override public void mouseReleased(MouseEvent evt) { + p_old = null; + figure = null; + lg.info("Figure finished"); if (evt.getButton() == MouseEvent.BUTTON3) { - view.doPrint(); +// view.doPrint(); + view.getGrafikView1().doPrint(); } } @@ -90,45 +112,64 @@ public class GrafikController implements MouseMotionListener, MouseListener, Key public void mouseExited(MouseEvent e) { } - + @Override - public void keyTyped(KeyEvent e) + public void actionPerformed(ActionEvent ae) { - } - - @Override - public void keyPressed(KeyEvent e) - { - if(e.getKeyCode() == KeyEvent.VK_S) + if(ae.getSource() == view.getBtnSafe()) { - try + Preferences pref = Preferences.userNodeForPackage(this.getClass()); + String path = pref.get("DEFAULT_PATH", ""); + view.getjFileChooser1().setCurrentDirectory(new File(path)); + + + int choice = view.getjFileChooser1().showSaveDialog(view); + if (choice == JFileChooser.APPROVE_OPTION) { - model.speichereDatei("TEST"); - } - catch (IOException ex) - { - Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + File selectedFile = view.getjFileChooser1().getSelectedFile(); + pref.put("DEFAULT_PATH", selectedFile.getAbsolutePath()); + try + { + //model.datenSpeichern(selectedFile); + model.speichereDatei("TEST"); + } + catch (UnsupportedEncodingException ex) + { + Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + } + catch (IOException ex) + { + Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + } } } - if(e.getKeyCode() == KeyEvent.VK_O) + if(ae.getSource() == view.getBtnOpen()) { - try + Preferences pref = Preferences.userNodeForPackage(this.getClass()); + String path = pref.get("DEFAULT_PATH", ""); + view.getjFileChooser1().setCurrentDirectory(new File(path)); + + int choice = view.getjFileChooser1().showOpenDialog(view); + if (choice == JFileChooser.APPROVE_OPTION) { - model.ladeDatei("TEST"); - } - catch (IOException ex) - { - Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); - } - catch (ClassNotFoundException ex) - { - Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + File selectedFile = view.getjFileChooser1().getSelectedFile(); + + pref.put("DEFAULT_PATH", selectedFile.getAbsolutePath()); + try + { + //model.datenLesen(selectedFile); + model.ladeDatei("TEST"); + } + catch (UnsupportedEncodingException ex) + { + Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + } + catch (IOException | ClassNotFoundException ex) + { + Logger.getLogger(GrafikController.class.getName()).log(Level.SEVERE, null, ex); + } } } } - - @Override - public void keyReleased(KeyEvent e) - { - } } + diff --git a/src/mvcgrafik/logger/MyFormatter.java b/src/mvcgrafik/logger/MyFormatter.java new file mode 100644 index 0000000..b6f49f7 --- /dev/null +++ b/src/mvcgrafik/logger/MyFormatter.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package mvcgrafik.logger; + +import java.util.Date; +import java.util.logging.Formatter; +import java.util.logging.LogRecord; + +/** + * + * @author chris + */ +public class MyFormatter extends Formatter { + + @Override + public String format(LogRecord lr) { + String date = String.format("%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp", new Date(lr.getMillis())); + String s = ("| ")+lr.getMillis()+(" | ")+date+(" | ")+lr.getLevel().toString()+(" | ")+lr.getSourceClassName()+(" | ")+lr.getMessage()+(" | ")+"\n"; + return s; + } + +} \ No newline at end of file diff --git a/src/mvcgrafik/logger/OhmLogger.java b/src/mvcgrafik/logger/OhmLogger.java new file mode 100644 index 0000000..6b1fcd3 --- /dev/null +++ b/src/mvcgrafik/logger/OhmLogger.java @@ -0,0 +1,54 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mvcgrafik.logger; + + +import mvcgrafik.logger.MyFormatter; +import java.io.File; +import java.io.IOException; +import java.util.logging.*; + + + +/** + * + * @author chris, hd + */ +public class OhmLogger +{ + public OhmLogger() + { + } + private static Logger lg = null; + public static Logger getLogger() + { + if (lg == null) + { + lg = Logger.getLogger("OhmLogger"); + initLogger(); + } + return lg; + } + + private static void initLogger() + { + try{ + String datei = System.getProperty("java.io.tmpdir") + File.separator + "log.txt"; + FileHandler fh = new FileHandler(datei); + ConsoleHandler ch = new ConsoleHandler(); + lg.addHandler(fh); + ch.setFormatter(new MyFormatter()); + lg.setUseParentHandlers(false); + lg.addHandler(ch); + lg.setLevel(Level.ALL); + + } + catch(IOException ioex) + { + System.err.println(ioex); + } + } +} diff --git a/src/mvcgrafik/model/GrafikModel.java b/src/mvcgrafik/model/GrafikModel.java index d88ba5f..b69d6c3 100755 --- a/src/mvcgrafik/model/GrafikModel.java +++ b/src/mvcgrafik/model/GrafikModel.java @@ -51,8 +51,9 @@ public class GrafikModel oos.writeObject(figures); oos.flush(); oos.close(); + } - + public void ladeDatei(String dateiname) throws FileNotFoundException, IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(dateiname); @@ -70,5 +71,4 @@ public class GrafikModel figures = (ArrayList
) ois.readObject(); ois.close(); } - -} +} \ No newline at end of file diff --git a/src/mvcgrafik/view/GrafikMenuView.form b/src/mvcgrafik/view/GrafikMenuView.form new file mode 100644 index 0000000..6578519 --- /dev/null +++ b/src/mvcgrafik/view/GrafikMenuView.form @@ -0,0 +1,91 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mvcgrafik/view/GrafikMenuView.java b/src/mvcgrafik/view/GrafikMenuView.java new file mode 100644 index 0000000..8e119e4 --- /dev/null +++ b/src/mvcgrafik/view/GrafikMenuView.java @@ -0,0 +1,192 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mvcgrafik.view; + +/** + * + * @author hd + */ +public class GrafikMenuView extends javax.swing.JFrame +{ + + /** + * Creates new form GrafikMenuView + */ + public GrafikMenuView() + { + initComponents(); + } + + + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() + { + + jFileChooser1 = new javax.swing.JFileChooser(); + jPanel1 = new javax.swing.JPanel(); + grafikView1 = new mvcgrafik.view.GrafikView(); + jMenuBar1 = new javax.swing.JMenuBar(); + jMenu1 = new javax.swing.JMenu(); + btnOpen = new javax.swing.JMenuItem(); + btnSafe = new javax.swing.JMenuItem(); + jMenu2 = new javax.swing.JMenu(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(grafikView1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(grafikView1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE) + ); + + getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); + + jMenu1.setText("File"); + + btnOpen.setText("Open"); + btnOpen.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(java.awt.event.ActionEvent evt) + { + btnOpenActionPerformed(evt); + } + }); + jMenu1.add(btnOpen); + + btnSafe.setText("Safe"); + btnSafe.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(java.awt.event.ActionEvent evt) + { + btnSafeActionPerformed(evt); + } + }); + jMenu1.add(btnSafe); + + jMenuBar1.add(jMenu1); + + jMenu2.setText("Edit"); + jMenuBar1.add(jMenu2); + + setJMenuBar(jMenuBar1); + + pack(); + }// //GEN-END:initComponents + + private void btnOpenActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnOpenActionPerformed + {//GEN-HEADEREND:event_btnOpenActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_btnOpenActionPerformed + + private void btnSafeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnSafeActionPerformed + {//GEN-HEADEREND:event_btnSafeActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_btnSafeActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try + { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) + { + if ("Nimbus".equals(info.getName())) + { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } + catch (ClassNotFoundException ex) + { + java.util.logging.Logger.getLogger(GrafikMenuView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (InstantiationException ex) + { + java.util.logging.Logger.getLogger(GrafikMenuView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + java.util.logging.Logger.getLogger(GrafikMenuView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (javax.swing.UnsupportedLookAndFeelException ex) + { + java.util.logging.Logger.getLogger(GrafikMenuView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() + { + public void run() + { + new GrafikMenuView().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JMenuItem btnOpen; + private javax.swing.JMenuItem btnSafe; + private mvcgrafik.view.GrafikView grafikView1; + private javax.swing.JFileChooser jFileChooser1; + private javax.swing.JMenu jMenu1; + private javax.swing.JMenu jMenu2; + private javax.swing.JMenuBar jMenuBar1; + private javax.swing.JPanel jPanel1; + // End of variables declaration//GEN-END:variables + + /** + * @return the grafikView1 + */ + public mvcgrafik.view.GrafikView getGrafikView1() + { + return grafikView1; + } + + /** + * @return the jFileChooser1 + */ + public javax.swing.JFileChooser getjFileChooser1() + { + return jFileChooser1; + } + + /** + * @return the btnOpen + */ + public javax.swing.JMenuItem getBtnOpen() + { + return btnOpen; + } + + /** + * @return the btnSafe + */ + public javax.swing.JMenuItem getBtnSafe() + { + return btnSafe; + } +} diff --git a/src/mvcgrafik/view/GrafikView.java b/src/mvcgrafik/view/GrafikView.java index 2c49339..e31061c 100755 --- a/src/mvcgrafik/view/GrafikView.java +++ b/src/mvcgrafik/view/GrafikView.java @@ -22,10 +22,11 @@ import javax.print.attribute.standard.DialogTypeSelection; import javax.swing.JComponent; import javax.swing.JOptionPane; import mvcgrafik.model.GrafikModel; +import mvcgrafik.logger.OhmLogger; /** * - * @author le + * @author hd, chris */ public class GrafikView extends JComponent implements Printable { @@ -58,6 +59,7 @@ public class GrafikView extends JComponent implements Printable @Override public void paintComponent(Graphics g) { + lg.info("repaint"); if (model == null) { lg.severe("keine Referenz auf Model vorhanden"); @@ -67,8 +69,9 @@ public class GrafikView extends JComponent implements Printable Graphics2D g2 = (Graphics2D) g; model.getFigures().forEach(figure -> { + old_punkt = null; figure.getPunkte().forEach(punkt -> { - pixel.setFrame(punkt, EINS); +// pixel.setFrame(punkt, EINS); // g2.draw(pixel); if(old_punkt != null) { @@ -82,7 +85,7 @@ public class GrafikView extends JComponent implements Printable public void doPrint() { HashPrintRequestAttributeSet printSet = - new HashPrintRequestAttributeSet(); + new HashPrintRequestAttributeSet(); printSet.add(DialogTypeSelection.NATIVE); PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(this);