erste Implementierung, klappt aber noch nicht, liegt aber glaub ich am model
und der Funktion lese Punkte, speichere Punkte
This commit is contained in:
parent
fc00ba58d8
commit
a222d2a48f
1
.gitignore
vendored
1
.gitignore
vendored
@ -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);
|
||||
}
|
||||
|
||||
|
58
src/mvcgrafik/controller/CommandController.java
Normal file
58
src/mvcgrafik/controller/CommandController.java
Normal file
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
17
src/mvcgrafik/controller/commands/CommandInterface.java
Normal file
17
src/mvcgrafik/controller/commands/CommandInterface.java
Normal file
@ -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();
|
||||
}
|
73
src/mvcgrafik/controller/commands/CommandInvoker.java
Normal file
73
src/mvcgrafik/controller/commands/CommandInvoker.java
Normal file
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
78
src/mvcgrafik/controller/commands/OpenCommand.java
Normal file
78
src/mvcgrafik/controller/commands/OpenCommand.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
80
src/mvcgrafik/controller/commands/SaveCommand.java
Normal file
80
src/mvcgrafik/controller/commands/SaveCommand.java
Normal file
@ -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
|
||||
}
|
||||
|
BIN
src/mvcgrafik/view/Open24.gif
Normal file
BIN
src/mvcgrafik/view/Open24.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 462 B |
BIN
src/mvcgrafik/view/Save24.gif
Normal file
BIN
src/mvcgrafik/view/Save24.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 266 B |
Loading…
x
Reference in New Issue
Block a user