und der Funktion lese Punkte, speichere PunkteToni
/nbproject/private/ | /nbproject/private/ | ||||
/build/ |
import javax.swing.JOptionPane; | import javax.swing.JOptionPane; | ||||
import javax.swing.UIManager; | import javax.swing.UIManager; | ||||
import mvcgrafik.controller.CommandController; | |||||
import mvcgrafik.controller.GrafikController; | import mvcgrafik.controller.GrafikController; | ||||
import mvcgrafik.model.GrafikModel; | import mvcgrafik.model.GrafikModel; | ||||
import mvcgrafik.view.GrafikFrame; | import mvcgrafik.view.GrafikFrame; | ||||
GrafikView view = frm.getgZeichenflaeche(); | GrafikView view = frm.getgZeichenflaeche(); | ||||
view.setModel(model); | view.setModel(model); | ||||
GrafikController controller = new GrafikController(view, model); | GrafikController controller = new GrafikController(view, model); | ||||
CommandController controller_commands = new CommandController(frm, model); | |||||
controller.registerEvents(); | controller.registerEvents(); | ||||
controller_commands.registerEvents(); | |||||
controller_commands.registerCommands(); | |||||
frm.setVisible(true); | frm.setVisible(true); | ||||
} | } | ||||
/* | |||||
* 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(); | |||||
} | |||||
} | |||||
} |
/* | |||||
* 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(); | |||||
} |
/* | |||||
* 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(); | |||||
} | |||||
} | |||||
/* | |||||
* 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; | |||||
} | |||||
} |
/* | |||||
* 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; | |||||
} | |||||
} |
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.prefs.Preferences; | |||||
/** | /** | ||||
* | * | ||||
{ | { | ||||
private ArrayList<Point> punkte; | private ArrayList<Point> punkte; | ||||
private ArrayList<ArrayList> figuren; | private ArrayList<ArrayList> figuren; | ||||
private Preferences pref; | |||||
public GrafikModel() | public GrafikModel() | ||||
{ | { | ||||
punkte.clear(); | 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(); | |||||
} | |||||
} | } |
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | ||||
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> | <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> | <Properties> | ||||
<Property name="defaultCloseOperation" type="int" value="3"/> | <Property name="defaultCloseOperation" type="int" value="3"/> | ||||
</Properties> | </Properties> | ||||
<Property name="useNullLayout" type="boolean" value="true"/> | <Property name="useNullLayout" type="boolean" value="true"/> | ||||
</Layout> | </Layout> | ||||
</Container> | </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> | </SubComponents> | ||||
</Form> | </Form> |
*/ | */ | ||||
public class GrafikFrame extends javax.swing.JFrame | 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 | * @return the gZeichenflaeche | ||||
*/ | */ | ||||
private void initComponents() | private void initComponents() | ||||
{ | { | ||||
FcFileChooser = new javax.swing.JFileChooser(); | |||||
gZeichenflaeche = new mvcgrafik.view.GrafikView(); | 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); | setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); | ||||
getContentPane().add(gZeichenflaeche, java.awt.BorderLayout.CENTER); | 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)); | setSize(new java.awt.Dimension(540, 412)); | ||||
setLocationRelativeTo(null); | setLocationRelativeTo(null); | ||||
}// </editor-fold>//GEN-END:initComponents | }// </editor-fold>//GEN-END:initComponents | ||||
} | } | ||||
// Variables declaration - do not modify//GEN-BEGIN:variables | // 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 mvcgrafik.view.GrafikView gZeichenflaeche; | ||||
private javax.swing.JToolBar jToolBar1; | |||||
// End of variables declaration//GEN-END:variables | // End of variables declaration//GEN-END:variables | ||||
} | } |