und der Funktion lese Punkte, speichere PunkteToni
@@ -1 +1,2 @@ | |||
/nbproject/private/ | |||
/build/ |
@@ -7,6 +7,7 @@ package mvcgrafik; | |||
import javax.swing.JOptionPane; | |||
import javax.swing.UIManager; | |||
import mvcgrafik.controller.CommandController; | |||
import mvcgrafik.controller.GrafikController; | |||
import mvcgrafik.model.GrafikModel; | |||
import mvcgrafik.view.GrafikFrame; | |||
@@ -25,7 +26,10 @@ public class Start | |||
GrafikView view = frm.getgZeichenflaeche(); | |||
view.setModel(model); | |||
GrafikController controller = new GrafikController(view, model); | |||
CommandController controller_commands = new CommandController(frm, model); | |||
controller.registerEvents(); | |||
controller_commands.registerEvents(); | |||
controller_commands.registerCommands(); | |||
frm.setVisible(true); | |||
} | |||
@@ -0,0 +1,58 @@ | |||
/* | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template | |||
*/ | |||
package mvcgrafik.controller; | |||
import java.awt.Component; | |||
import java.awt.event.ActionEvent; | |||
import java.awt.event.ActionListener; | |||
import mvcgrafik.controller.commands.CommandInvoker; | |||
import mvcgrafik.controller.commands.OpenCommand; | |||
import mvcgrafik.controller.commands.SaveCommand; | |||
import mvcgrafik.model.GrafikModel; | |||
import mvcgrafik.view.GrafikFrame; | |||
/** | |||
* | |||
* @author ahren | |||
*/ | |||
public class CommandController implements ActionListener | |||
{ | |||
private GrafikFrame view; | |||
private GrafikModel model; | |||
private CommandInvoker invoker; | |||
public CommandController(GrafikFrame view, GrafikModel model) | |||
{ | |||
this.view = view; | |||
this.model = model; | |||
this.invoker = new CommandInvoker(); | |||
} | |||
public void registerEvents() | |||
{ | |||
view.getBtnFileOpen().addActionListener(this); | |||
view.getBtnFileSave().addActionListener(this); | |||
} | |||
public void registerCommands() | |||
{ | |||
invoker.addCommand(view.getBtnFileOpen(), new OpenCommand(view, model)); | |||
invoker.addCommand(view.getBtnFileSave(), new SaveCommand(view,model)); | |||
} | |||
/** | |||
* Ausführen des jeweiligen Kommandos | |||
* @param e Referenz auf das Event | |||
*/ | |||
@Override | |||
public void actionPerformed(ActionEvent e) { | |||
Component key = (Component)e.getSource(); | |||
invoker.executeCommand(key); | |||
if(key == view.getBtnFileOpen()){ | |||
invoker.deleteStack(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
/* | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template | |||
*/ | |||
package mvcgrafik.controller.commands; | |||
/** | |||
* | |||
* @author ahren | |||
*/ | |||
public interface CommandInterface | |||
{ | |||
public void execute(); | |||
public void undo(); | |||
public void redo(); | |||
public boolean isUndoable(); | |||
} |
@@ -0,0 +1,73 @@ | |||
/* | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template | |||
*/ | |||
package mvcgrafik.controller.commands; | |||
import java.awt.Component; | |||
import java.util.HashMap; | |||
import java.util.Stack; | |||
/** | |||
* Dient zur Realisierung des Polymorphismus | |||
* für das COmmand-Design-Pattern | |||
* Die Commands werden in einer HashMap gespeichert | |||
* @author ahren | |||
* @see CommandInterface | |||
*/ | |||
public class CommandInvoker { | |||
private HashMap<Component, CommandInterface> commands; | |||
private Stack <CommandInterface> undoStack; | |||
public CommandInvoker(){ | |||
commands = new HashMap<>(); | |||
undoStack = new Stack(); | |||
} | |||
/** | |||
* Fügt ein Kommando zur Kommando-"Datenbank" = HashMap hinzu | |||
* @param key Quelle des Events | |||
* @param value Referenz auf das zugehörige Kommando-Objekt | |||
*/ | |||
public void addCommand(Component key, CommandInterface value){ | |||
commands.put(key, value); | |||
} | |||
/** | |||
* Führt Kommando der Eventquelle "key" aus und legt die Referenz | |||
* des Kommando in den Undo-Stack | |||
* @param key Referenz auf die Eventquelle | |||
*/ | |||
public void executeCommand(Component key){ | |||
CommandInterface command = commands.get(key); | |||
command.execute(); | |||
if (command.isUndoable()) | |||
{ | |||
undoStack.push(command); | |||
} | |||
} | |||
/** | |||
* Falls der Stack Elemente enthält, wird das oberste Element geholt | |||
* und die Methode "undo" des Commands aufgerufen | |||
*/ | |||
public void undoCommand() | |||
{ | |||
if (!undoStack.isEmpty()) | |||
{ | |||
undoStack.pop().undo(); | |||
} | |||
} | |||
/** | |||
* Löscht bei Öffnen einer neuen Datei den Stack | |||
*/ | |||
public void deleteStack() | |||
{ | |||
while(!undoStack.isEmpty()) | |||
undoStack.pop(); | |||
} | |||
} | |||
@@ -0,0 +1,78 @@ | |||
/* | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template | |||
*/ | |||
package mvcgrafik.controller.commands; | |||
import java.io.File; | |||
import java.io.FileNotFoundException; | |||
import java.io.IOException; | |||
import java.util.logging.Level; | |||
import java.util.logging.Logger; | |||
import javax.swing.JFileChooser; | |||
import mvcgrafik.model.GrafikModel; | |||
import mvcgrafik.view.GrafikFrame; | |||
/** | |||
* | |||
* @author ahren | |||
*/ | |||
public class OpenCommand implements CommandInterface | |||
{ | |||
private GrafikFrame view; | |||
private GrafikModel model; | |||
public OpenCommand(GrafikFrame view, GrafikModel model) | |||
{ | |||
this.view = view; | |||
this.model = model; | |||
} | |||
@Override | |||
public void execute() { | |||
JFileChooser fc = view.getFcFileChooser(); | |||
String lastDirectory = model.getPref(); | |||
if (lastDirectory != null) { | |||
fc.setCurrentDirectory(new File(lastDirectory)); | |||
} | |||
int choice = fc.showOpenDialog(view); | |||
if (choice == JFileChooser.APPROVE_OPTION) | |||
{ | |||
File selectedFile = fc.getSelectedFile(); | |||
String filename = selectedFile.getAbsolutePath(); | |||
model.putPref("lastDirectory", selectedFile.getParent()); | |||
try | |||
{ | |||
model.lesePunkte(filename); | |||
} | |||
catch (FileNotFoundException ex) | |||
{ | |||
Logger.getLogger(OpenCommand.class.getName()).log(Level.SEVERE, null, ex); | |||
} | |||
catch (ClassNotFoundException | IOException ex) | |||
{ | |||
Logger.getLogger(OpenCommand.class.getName()).log(Level.SEVERE, null, ex); | |||
} | |||
model.deleteArrays(); | |||
} | |||
} | |||
@Override | |||
public void undo() { | |||
throw new UnsupportedOperationException("Not undoable."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody | |||
} | |||
@Override | |||
public void redo() { | |||
throw new UnsupportedOperationException("Not redoable."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody | |||
} | |||
@Override | |||
public boolean isUndoable() | |||
{ | |||
return false; | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
/* | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license | |||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template | |||
*/ | |||
package mvcgrafik.controller.commands; | |||
import java.io.File; | |||
import java.io.FileNotFoundException; | |||
import java.io.IOException; | |||
import java.util.logging.Level; | |||
import java.util.logging.Logger; | |||
import javax.swing.JFileChooser; | |||
import mvcgrafik.model.GrafikModel; | |||
import mvcgrafik.view.GrafikFrame; | |||
/** | |||
* | |||
* @author ahren | |||
*/ | |||
public class SaveCommand implements CommandInterface | |||
{ | |||
private GrafikFrame view; | |||
private GrafikModel model; | |||
public SaveCommand(GrafikFrame view, GrafikModel model){ | |||
this.view = view; | |||
this.model = model; | |||
} | |||
/** | |||
* Aufrufen des File Choosers in zuletzt verwendeten Ordner, versuchen die | |||
* Tabellendatei zu speichern | |||
*/ | |||
@Override | |||
public void execute() { | |||
JFileChooser fc = view.getFcFileChooser(); | |||
String lastDirectory = model.getPref(); | |||
if (lastDirectory != null) { | |||
fc.setCurrentDirectory(new File(lastDirectory)); | |||
} | |||
int choice = fc.showSaveDialog(view); | |||
if (choice == JFileChooser.APPROVE_OPTION) | |||
{ | |||
File selectedFile = fc.getSelectedFile(); | |||
String filename = selectedFile.getAbsolutePath(); | |||
model.putPref("lastDirectory", selectedFile.getParent()); | |||
try | |||
{ | |||
model.speicherePunkte(filename); | |||
} | |||
catch (FileNotFoundException ex) | |||
{ | |||
Logger.getLogger(SaveCommand.class.getName()).log(Level.SEVERE, null, ex); | |||
} | |||
catch (IOException ex) | |||
{ | |||
Logger.getLogger(SaveCommand.class.getName()).log(Level.SEVERE, null, ex); | |||
} | |||
} | |||
} | |||
@Override | |||
public void undo() { | |||
throw new UnsupportedOperationException("Not undoable."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody | |||
} | |||
@Override | |||
public void redo() { | |||
throw new UnsupportedOperationException("Not redoable."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody | |||
} | |||
@Override | |||
public boolean isUndoable() { | |||
return false; | |||
} | |||
} |
@@ -17,6 +17,7 @@ import java.io.ObjectOutputStream; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import java.util.prefs.Preferences; | |||
/** | |||
* | |||
@@ -26,6 +27,7 @@ public class GrafikModel | |||
{ | |||
private ArrayList<Point> punkte; | |||
private ArrayList<ArrayList> figuren; | |||
private Preferences pref; | |||
public GrafikModel() | |||
{ | |||
@@ -93,6 +95,30 @@ public class GrafikModel | |||
punkte.clear(); | |||
} | |||
/** | |||
* Bestimmt die Adresse des zuletzt besuchten Ordners | |||
* @return letzter Ordner | |||
*/ | |||
public String getPref() | |||
{ | |||
pref = Preferences.userNodeForPackage(getClass()); | |||
return pref.get("lastDirectory", null); | |||
} | |||
/** | |||
* Setzt die Preferenz zu dem zuletzt besuchten Ordner | |||
* @param lastDirectory Bezeichner "lastDirectory" | |||
* @param lastAdress Adresse des zuletzt besuchten Ordners | |||
*/ | |||
public void putPref(String lastDirectory, String lastAdress) | |||
{ | |||
pref.put(lastDirectory, lastAdress); | |||
} | |||
public void deleteArrays() | |||
{ | |||
figuren.clear(); | |||
punkte.clear(); | |||
} | |||
} |
@@ -1,6 +1,10 @@ | |||
<?xml version="1.0" encoding="UTF-8" ?> | |||
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> | |||
<NonVisualComponents> | |||
<Component class="javax.swing.JFileChooser" name="FcFileChooser"> | |||
</Component> | |||
</NonVisualComponents> | |||
<Properties> | |||
<Property name="defaultCloseOperation" type="int" value="3"/> | |||
</Properties> | |||
@@ -35,5 +39,40 @@ | |||
<Property name="useNullLayout" type="boolean" value="true"/> | |||
</Layout> | |||
</Container> | |||
<Container class="javax.swing.JToolBar" name="jToolBar1"> | |||
<Properties> | |||
<Property name="rollover" type="boolean" value="true"/> | |||
</Properties> | |||
<Constraints> | |||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> | |||
<BorderConstraints direction="First"/> | |||
</Constraint> | |||
</Constraints> | |||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/> | |||
<SubComponents> | |||
<Component class="javax.swing.JButton" name="btnFileOpen"> | |||
<Properties> | |||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> | |||
<Image iconType="3" name="/mvcgrafik/view/Open24.gif"/> | |||
</Property> | |||
<Property name="toolTipText" type="java.lang.String" value="Open File"/> | |||
<Property name="focusable" type="boolean" value="false"/> | |||
<Property name="horizontalTextPosition" type="int" value="0"/> | |||
<Property name="verticalTextPosition" type="int" value="3"/> | |||
</Properties> | |||
</Component> | |||
<Component class="javax.swing.JButton" name="btnFileSave"> | |||
<Properties> | |||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> | |||
<Image iconType="3" name="/mvcgrafik/view/Save24.gif"/> | |||
</Property> | |||
<Property name="toolTipText" type="java.lang.String" value="Safe File"/> | |||
<Property name="horizontalTextPosition" type="int" value="0"/> | |||
<Property name="verticalTextPosition" type="int" value="3"/> | |||
</Properties> | |||
</Component> | |||
</SubComponents> | |||
</Container> | |||
</SubComponents> | |||
</Form> |
@@ -10,6 +10,30 @@ package mvcgrafik.view; | |||
*/ | |||
public class GrafikFrame extends javax.swing.JFrame | |||
{ | |||
/** | |||
* @return the FcFileChooser | |||
*/ | |||
public javax.swing.JFileChooser getFcFileChooser() | |||
{ | |||
return FcFileChooser; | |||
} | |||
/** | |||
* @return the btnFileOpen | |||
*/ | |||
public javax.swing.JButton getBtnFileOpen() | |||
{ | |||
return btnFileOpen; | |||
} | |||
/** | |||
* @return the btnFileSave | |||
*/ | |||
public javax.swing.JButton getBtnFileSave() | |||
{ | |||
return btnFileSave; | |||
} | |||
/** | |||
* @return the gZeichenflaeche | |||
*/ | |||
@@ -36,11 +60,32 @@ public class GrafikFrame extends javax.swing.JFrame | |||
private void initComponents() | |||
{ | |||
FcFileChooser = new javax.swing.JFileChooser(); | |||
gZeichenflaeche = new mvcgrafik.view.GrafikView(); | |||
jToolBar1 = new javax.swing.JToolBar(); | |||
btnFileOpen = new javax.swing.JButton(); | |||
btnFileSave = new javax.swing.JButton(); | |||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); | |||
getContentPane().add(gZeichenflaeche, java.awt.BorderLayout.CENTER); | |||
jToolBar1.setRollover(true); | |||
btnFileOpen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mvcgrafik/view/Open24.gif"))); // NOI18N | |||
btnFileOpen.setToolTipText("Open File"); | |||
btnFileOpen.setFocusable(false); | |||
btnFileOpen.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); | |||
btnFileOpen.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); | |||
jToolBar1.add(btnFileOpen); | |||
btnFileSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mvcgrafik/view/Save24.gif"))); // NOI18N | |||
btnFileSave.setToolTipText("Safe File"); | |||
btnFileSave.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); | |||
btnFileSave.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); | |||
jToolBar1.add(btnFileSave); | |||
getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START); | |||
setSize(new java.awt.Dimension(540, 412)); | |||
setLocationRelativeTo(null); | |||
}// </editor-fold>//GEN-END:initComponents | |||
@@ -95,6 +140,10 @@ public class GrafikFrame extends javax.swing.JFrame | |||
} | |||
// Variables declaration - do not modify//GEN-BEGIN:variables | |||
private javax.swing.JFileChooser FcFileChooser; | |||
private javax.swing.JButton btnFileOpen; | |||
private javax.swing.JButton btnFileSave; | |||
private mvcgrafik.view.GrafikView gZeichenflaeche; | |||
private javax.swing.JToolBar jToolBar1; | |||
// End of variables declaration//GEN-END:variables | |||
} |