21 Commits
Author SHA1 Message Date
ahren 4ec7e6bc4c bzw jetzt ist auch der Transmitter kein Subscriber mehr, warum war
der das eh überhaupt?
2023-12-20 16:04:24 +01:00
ahren e8f0fd53d6 angepasst an Lehners UML,
Transmitterinterface raus, nur noch ein Controller und ein Chatmodel
mit GrafikDaten anstatt GrafikModel
das einzige was noch nicht so ist wie in seinem UML ist, dass das 
Chatmodel kein Subscriber ist sondern immernoch der Transmitter
2023-12-20 16:00:43 +01:00
ahren 7ae10ac02f whatever 2023-12-20 14:49:45 +01:00
schuhmannje82308 68eb43c715 Funktioniert und aufgeräumt 2023-12-19 17:57:16 +01:00
schuhmannje82308 541b497796 Nur aufgeraumt, keine Funktionalen Aenderungen 2023-12-19 12:40:26 +01:00
schuhmannje82308 43de325d71 Nur aufgeraumt, keine Funktionalen Aenderungen 2023-12-19 12:38:51 +01:00
schuhmannje82308 0e71917727 Läuft muss nurnoch aufgeräumt werden 2023-12-19 12:05:37 +01:00
schuhmannje82308 dc1f783e00 Zwischenstand im Praktikum -> läuft schonmal so fast richtig 2023-12-19 11:53:02 +01:00
schuhmannje82308 2fc05ae87f Zwischenstand im Praktikum -> läuft schonmal so fast richtig 2023-12-19 11:52:47 +01:00
schuhmannje82308 5117ecdb6f Zwischenstand vor Praktikum 2023-12-19 11:48:40 +01:00
schuhmannje82308 a4a45ed5f2 Der CommandSend will den server/client einfach nicht als
TransmitterInterface fressen aber sonst sollte es klappen
2023-12-18 18:24:07 +01:00
schuhmannje82308 6642dc8179 InitIO klappt und wir landen in der senden Funktion 2023-12-18 16:55:17 +01:00
schuhmannje82308 f05b0f0014 Version von Toni übernommen, stand nach der LC session 2023-12-18 14:09:39 +01:00
schuhmannje82308 1aa5b51e78 Versuch SendCommand mit invoker zu implementieren 2023-12-18 14:00:26 +01:00
ahren ba0f12561b wir hängen irgendwo in der IO 2023-12-18 13:56:06 +01:00
ahren e7034fc7a4 init branch 2023-12-18 13:19:57 +01:00
ahren 19fd23c638 versuch über invoker in GrafikController 2023-12-18 13:18:49 +01:00
ahren f7a0de0041 erfolg nr 1 2023-12-18 13:07:14 +01:00
ahren 0da0f2cc5b zeichenfläche wieder drin 2023-12-18 12:47:24 +01:00
schuhmannje82308 64a6047ca4 GrafikFrame und View mal eingefügt aber noch nicht eingebunden
Ich hab überall wo der Frame eingebunden werden muss die sachen 
auskommentiert und ToDos eingefügt
2023-12-18 11:21:08 +01:00
schuhmannje82308 78c5d8eedf GrafikModel und Figur eingefügt 2023-12-18 10:58:58 +01:00
20 changed files with 441 additions and 277 deletions

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
/nbproject/private/
/build/
/dist/
+2 -2
View File
@@ -1,8 +1,8 @@
build.xml.data.CRC32=05f3ad23
build.xml.data.CRC32=126b3ece
build.xml.script.CRC32=1a88b66a
build.xml.stylesheet.CRC32=f85dc8f2@1.108.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=05f3ad23
nbproject/build-impl.xml.data.CRC32=126b3ece
nbproject/build-impl.xml.script.CRC32=fdc076e6
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.108.0.48
+1
View File
@@ -11,5 +11,6 @@
<root id="test.src.dir"/>
</test-roots>
</data>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
</configuration>
</project>
+4 -1
View File
@@ -6,6 +6,7 @@
package ChatProgramm;
import ChatProgramm.controller.CommandController;
import ChatProgramm.model.ChatModel;
import ChatProgramm.view.ChatView;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
@@ -19,7 +20,9 @@ public class Start
public Start()
{
ChatView view = new ChatView();
CommandController controller_commands = new CommandController(view);
ChatModel model = new ChatModel(view);
view.getGvZeichenflaeche().setModel(model.getGrafikDaten());
CommandController controller_commands = new CommandController(view, model);
controller_commands.registerEvents();
controller_commands.registerCommands();
view.setVisible(true);
@@ -8,36 +8,45 @@ package ChatProgramm.controller;
import ChatProgramm.controller.commands.CommandConnect;
import ChatProgramm.controller.commands.CommandInvoker;
import ChatProgramm.controller.commands.CommandSend;
import ChatProgramm.model.ChatModel;
import ChatProgramm.view.ChatView;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import static java.awt.event.MouseEvent.MOUSE_RELEASED;
import java.awt.event.MouseMotionListener;
/**
*
* @author ahren
*/
public class CommandController implements ActionListener{
public class CommandController extends MouseAdapter implements MouseMotionListener, ActionListener{
private ChatView view;
private ChatModel model;
private CommandInvoker invoker;
public CommandController(ChatView view){
public CommandController(ChatView view, ChatModel model){
this.view = view;
this.model = model;
this.invoker = new CommandInvoker();
}
public void registerEvents(){
view.getBtnConnect().addActionListener(this);
view.getTfNachricht().addActionListener(this);
view.getBtnConnect().addActionListener(this);
view.addMouseMotionListener(this);
view.addMouseListener(this);
}
public void registerCommands(){
CommandSend commandSend = new CommandSend(view);
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, commandSend));
invoker.addCommand(view.getTfNachricht(), commandSend);
invoker.addCommand(view.getBtnConnect(), new CommandConnect(view, model));
invoker.addCommand(view.getGvZeichenflaeche(), new CommandSend(view, model));
}
/**
* Ausführen des jeweiligen Kommandos
* @param e Referenz auf das Event
@@ -46,10 +55,22 @@ public class CommandController implements ActionListener{
public void actionPerformed(ActionEvent e) {
Component key = (Component)e.getSource();
invoker.executeCommand(key);
// if(key == view.getBtnOpen()|| key==view.getMiOpen())
// invoker.deleteStack();
// }
}
@Override
public void mouseDragged(MouseEvent evt)
{
Point p = evt.getPoint();
model.getGrafikDaten().addPoint(p);
view.getGvZeichenflaeche().drawPoint();
}
@Override
public void mouseReleased(MouseEvent evt)
{
model.getGrafikDaten().endShape();
invoker.executeCommand(view.getGvZeichenflaeche());
}
}
@@ -5,10 +5,14 @@
package ChatProgramm.controller.commands;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Client;
import ChatProgramm.model.GrafikDaten;
import ChatProgramm.model.Server;
import ChatProgramm.model.Transmitter;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import java.io.IOException;
import java.util.logging.Logger;
import javax.swing.JDialog;
@@ -24,18 +28,16 @@ public class CommandConnect implements CommandInterface
private JRadioButton rBtnClient;
private JDialog dialogFenster;
private static Logger lg = OhmLogger.getLogger();
private CommandSend commandSend;
private ChatView view;
private ChatModel model;
public CommandConnect(ChatView view, CommandInterface value)
public CommandConnect(ChatView view, ChatModel model)
{
rBtnServer = view.getBtnServer();
rBtnClient = view.getBtnClient();
dialogFenster = view.getjDialog1();
commandSend = (CommandSend) value;
this.view = view;
this.model = model;
}
@Override
@@ -44,7 +46,7 @@ public class CommandConnect implements CommandInterface
if(rBtnServer.isSelected()){
lg.info("Server ausgewählt");
try {
commandSend.transmitterInterface = new Server(view);
model.setTransmitterToServer();
} catch (IOException ex) {
lg.info("Die Verbindung zum Server ist Fehlgeschlagen");
}
@@ -53,13 +55,12 @@ public class CommandConnect implements CommandInterface
if(rBtnClient.isSelected()){
lg.info("Client ausgewählt");
try {
commandSend.transmitterInterface = new Client(view);
model.setTransmitterToClient();
} catch (IOException ex) {
lg.info("Die Verbindung zum Client ist Fehlgeschlagen");
}
}
dialogFenster.setVisible(false);
}
@@ -5,14 +5,11 @@
package ChatProgramm.controller.commands;
import ChatProgramm.model.Client;
import ChatProgramm.model.Server;
import ChatProgramm.model.TransmitterInterface;
import ChatProgramm.model.ChatModel;
import ChatProgramm.model.Figur;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.util.logging.Logger;
import javax.swing.JTextField;
import ChatProgramm.model.Nachricht;
/**
*
@@ -21,33 +18,30 @@ import ChatProgramm.model.Nachricht;
public class CommandSend implements CommandInterface
{
private static Logger lg = OhmLogger.getLogger();
private JTextField eingabeFeld;
private String nachricht;
private ChatView view;
public TransmitterInterface transmitterInterface;
public Server server;
public Client client;
public CommandSend(ChatView view)
private ChatView view;
private ChatModel model;
public CommandSend(ChatView view, ChatModel model)
{
this.view = view;
this.eingabeFeld = view.getTfNachricht();
transmitterInterface = null;
this.model = model;
}
@Override
public void execute()
{
if(transmitterInterface != null && !eingabeFeld.getText().isEmpty()){
transmitterInterface.send(eingabeFeld.getText());
eingabeFeld.setText("");
}
Figur aktuelleFigur = model.getGrafikDaten().getFiguren().getLast();
try
{
model.getTransmitter().send(aktuelleFigur);
}
catch(Exception NullPointerExeption)
{
lg.info("Der Transmitter ist null");
}
}
@Override
public boolean isUndoable()
{
+49
View File
@@ -0,0 +1,49 @@
/*
* 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 ChatProgramm.model;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import java.io.IOException;
import java.util.logging.Logger;
/**
*
* @author ahren
*/
public class ChatModel
{
private Transmitter transmitter;
private static Logger lg = OhmLogger.getLogger();
private GrafikDaten grafikdaten = new GrafikDaten();
private ChatView view;
public ChatModel(ChatView view)
{
this.view = view;
}
public GrafikDaten getGrafikDaten()
{
return grafikdaten;
}
public void setTransmitterToClient() throws IOException
{
transmitter = new Client(view, this);
}
public void setTransmitterToServer()throws IOException
{
transmitter = new Server(view, this);
}
public Transmitter getTransmitter()
{
return transmitter;
}
}
+5 -3
View File
@@ -4,7 +4,9 @@
*/
package ChatProgramm.model;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.*;
@@ -16,13 +18,13 @@ import java.util.logging.*;
*/
public class Client extends Transmitter {
private static Logger lg = Logger.getLogger("netz");
private static Logger lg = OhmLogger.getLogger();
private static final int PORT = 35000; //lt. iana port > 2¹⁵
private static final String IP = "127.0.0.1";
public Client(ChatView view) throws IOException {
super(view);
public Client(ChatView view, ChatModel model) throws IOException {
super(view, model);
connect();
initIO();
}
+39
View File
@@ -0,0 +1,39 @@
/*
* 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 ChatProgramm.model;
import java.awt.Point;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
* @author ahren
*/
public class Figur implements Serializable
{
private ArrayList<Point> punkte;
public Figur(){
punkte = new ArrayList<>();
}
public void addPoint(Point p){
punkte.add(p);
}
public List<Point> getPunkte()
{
return Collections.unmodifiableList(punkte);
}
public void clear(){
punkte.clear();
}
}
+60
View File
@@ -0,0 +1,60 @@
/*
* 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 ChatProgramm.model;
import java.awt.Point;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import ChatProgramm.util.OhmLogger;
/**
*
* @author le
*/
public class GrafikDaten {
private Figur aktuelleFigur;
private ArrayList<Figur> figuren;
private Preferences pref;
private static Logger lg = OhmLogger.getLogger();
public GrafikDaten() {
aktuelleFigur = new Figur();
figuren = new ArrayList<>();
}
public void addPoint(Point p) {
aktuelleFigur.addPoint(p);
}
public void addFigure(Figur figur) {
figuren.add(figur);
}
public List<Point> getPunkte() {
return aktuelleFigur.getPunkte();
}
public List<Figur> getFiguren() {
return Collections.unmodifiableList(figuren);
}
public void endShape() {
figuren.add(aktuelleFigur);
aktuelleFigur = new Figur();
}
}
-31
View File
@@ -1,31 +0,0 @@
/*
* 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 ChatProgramm.model;
/**
*
* @author ahren
*/
public class Nachricht
{
private String nachricht;
public Nachricht(String nachricht)
{
this.nachricht = nachricht;
}
/**
* @return the nachricht
*/
public String getNachricht() {
return nachricht;
}
public void setNachricht(String nachricht) {
this.nachricht = nachricht;
}
}
+14 -6
View File
@@ -4,21 +4,28 @@
*/
package ChatProgramm.model;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import java.util.concurrent.Flow;
import java.util.concurrent.Flow.Subscriber;
import java.util.logging.Logger;
/**
*
* @author ahren
*/
public class ReceiveAdapter implements Subscriber<Nachricht> {
public class ReceiveAdapter implements Subscriber<Figur> {
private static Logger lg = OhmLogger.getLogger();
private ChatView view;
private ChatModel model;
private Flow.Subscription subscription;
public ReceiveAdapter(ChatView view) {
public ReceiveAdapter(ChatView view, ChatModel model) {
this.view = view;
this.model = model;
}
@Override
@@ -27,10 +34,10 @@ public class ReceiveAdapter implements Subscriber<Nachricht> {
this.subscription.request(1);
}
@Override
public void onNext(Nachricht item) {
view.getTxtChat().append(item.getNachricht());
public void onNext(Figur item) {
model.getGrafikDaten().addFigure(item);
view.getGvZeichenflaeche().drawFigur();
lg.info("Figur wurde dem Grafikmodel hinzugefügt");
this.subscription.request(1);
}
@@ -41,4 +48,5 @@ public class ReceiveAdapter implements Subscriber<Nachricht> {
@Override
public void onComplete(){
}
}
+9 -9
View File
@@ -5,7 +5,9 @@
package ChatProgramm.model;
import ChatProgramm.util.OhmLogger;
import ChatProgramm.view.ChatView;
import ChatProgramm.view.GrafikView;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.logging.*;
@@ -16,10 +18,15 @@ import java.util.logging.*;
*/
public class Server extends Transmitter
{
private static Logger lg = Logger.getLogger("netz");
private static Logger lg = OhmLogger.getLogger();
private static final int PORT = 35000; //lt. iana port > 2¹⁵
public Server(ChatView view, ChatModel model) throws IOException {
super(view, model);
connect();
initIO();
}
public void connect() throws IOException
{
try
@@ -34,12 +41,5 @@ public class Server extends Transmitter
{
lg.warning("Timeout"+"("+timeout/1000+"s)");
}
}
public Server(ChatView view) throws IOException {
super(view);
connect();
initIO();
}
}
+54 -75
View File
@@ -5,13 +5,11 @@
package ChatProgramm.model;
import ChatProgramm.view.ChatView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
@@ -26,7 +24,7 @@ import java.util.logging.Logger;
*
* @author ahren
*/
public abstract class Transmitter implements Runnable, Subscriber<String>, TransmitterInterface {
public abstract class Transmitter implements Runnable {
static final int timeout = 60000;
private static final int PORT = 35000;
@@ -34,32 +32,31 @@ public abstract class Transmitter implements Runnable, Subscriber<String>, Trans
private static Logger lg = Logger.getLogger("netz");
protected Socket socket;
protected BufferedReader reader;
protected PrintWriter writer;
protected ObjectInputStream reader;
protected ObjectOutputStream writer;
private Nachricht nachricht;
private String txtNachricht;
private boolean laufend;
private SubmissionPublisher<Nachricht> textPublisher;
private Figur figur;
private SubmissionPublisher<Figur> figurPublisher;
private ExecutorService eService;
private String receivedString;
private ChatView view;
private ChatModel model;
private ReceiveAdapter receiveAdapter;
public Transmitter(ChatView view)
public Transmitter(ChatView view, ChatModel model)
{
socket = new Socket();
eService = null;
receiveAdapter = new ReceiveAdapter(view);
textPublisher = new SubmissionPublisher<>();
receiveAdapter = new ReceiveAdapter(view, model);
figurPublisher = new SubmissionPublisher<>();
this.view = view;
addWertSubscription(receiveAdapter);
nachricht = new Nachricht("");
figur = new Figur();
}
public void addWertSubscription(Subscriber<Nachricht> subscriber)
public void addWertSubscription(Subscriber<Figur> subscriber)
{
textPublisher.subscribe(subscriber);
figurPublisher.subscribe(subscriber);
}
public abstract void connect() throws IOException;
@@ -70,14 +67,12 @@ public abstract class Transmitter implements Runnable, Subscriber<String>, Trans
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
OutputStreamWriter osr = new OutputStreamWriter(os, "UTF-8");
reader = new BufferedReader(isr);
writer = new PrintWriter(osr);
writer = new ObjectOutputStream(os);
writer.flush();
reader = new ObjectInputStream(is);
lg.info("Reader / Writer Initialisierung abgeschlossen");
startempfangen();
lg.info("Warte auf Nachricht");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
@@ -86,76 +81,60 @@ public abstract class Transmitter implements Runnable, Subscriber<String>, Trans
}
}
public void send(String txtNachricht){
writer.println(txtNachricht);
/**
*
* @param figur
* @throws IOException
*/
public void send(Figur figur){
try
{
writer.writeObject(figur);
writer.flush();
}
catch (IOException ex)
{
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
}
lg.info("Nachricht gesendet");
nachricht.setNachricht("\nDu: " + txtNachricht);
textPublisher.submit(nachricht);
figurPublisher.submit(figur);
}
public Nachricht receive(){
try {
txtNachricht = reader.readLine();
if(!txtNachricht.isEmpty()){
lg.info("Nachricht erhalten");
nachricht.setNachricht("\nEr / Sie: " + txtNachricht);
return nachricht;
public Figur receive(){
Object receivedObject;
try {
receivedObject = reader.readObject();
if (receivedObject instanceof Figur) {
lg.info("Figur erhalten");
figur = (Figur) receivedObject;
}
} catch (IOException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Transmitter.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return nachricht;
return figur;
}
// public void disconnect (){
// in.close();
// out.close();
// s.close();
// }
@Override
public void run() {
while (true) {
lg.info("Warte auf Nachricht");
if(laufend) {
nachricht = receive();
if(!nachricht.getNachricht().isEmpty()){
textPublisher.submit(nachricht);
figur = receive();
if(!figur.getPunkte().isEmpty()){
figurPublisher.submit(figur);
}
}
else{
break;
}
}
}
@Override
public void onSubscribe(Flow.Subscription subscription) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
@Override
public void onNext(String item) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
@Override
public void onError(Throwable throwable) {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
@Override
public void onComplete() {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
}
private void startempfangen()
private void startempfangen()
{
synchronized (this){
laufend = true;
}
if (eService == null){
eService = Executors.newSingleThreadExecutor();
@@ -1,17 +0,0 @@
/*
* 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 ChatProgramm.model;
import ChatProgramm.model.Nachricht;
/**
*
* @author ahren
*/
public interface TransmitterInterface
{
public void send(String txtNachricht);
public Nachricht receive();
}
+4 -33
View File
@@ -107,45 +107,16 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Component class="javax.swing.JTextField" name="tfNachricht">
<Properties>
<Property name="toolTipText" type="java.lang.String" value=""/>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="tfNachrichtMouseClicked"/>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="tfNachrichtActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Last"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[238, 150]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Container class="ChatProgramm.view.GrafikView" name="gvZeichenflaeche">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTextArea" name="txtChat">
<Properties>
<Property name="columns" type="int" value="20"/>
<Property name="rows" type="int" value="5"/>
<Property name="text" type="java.lang.String" value="Chat:"/>
</Properties>
</Component>
</SubComponents>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
<Property name="useNullLayout" type="boolean" value="true"/>
</Layout>
</Container>
</SubComponents>
</Form>
+26 -57
View File
@@ -11,6 +11,14 @@ package ChatProgramm.view;
public class ChatView extends javax.swing.JFrame
{
/**
* @return the gvZeichenflaeche
*/
public ChatProgramm.view.GrafikView getGvZeichenflaeche()
{
return gvZeichenflaeche;
}
/**
* Creates new form ChatView
*/
@@ -36,9 +44,7 @@ public class ChatView extends javax.swing.JFrame
jPanel1 = new javax.swing.JPanel();
BtnConnect = new javax.swing.JButton();
BtnGrpMode = new javax.swing.ButtonGroup();
tfNachricht = new javax.swing.JTextField();
jScrollPane2 = new javax.swing.JScrollPane();
txtChat = new javax.swing.JTextArea();
gvZeichenflaeche = new ChatProgramm.view.GrafikView();
dialogChooseMode.setMinimumSize(new java.awt.Dimension(278, 208));
dialogChooseMode.getContentPane().setLayout(new java.awt.GridLayout(0, 1));
@@ -105,32 +111,7 @@ public class ChatView extends javax.swing.JFrame
formWindowOpened(evt);
}
});
tfNachricht.setToolTipText("");
tfNachricht.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(java.awt.event.MouseEvent evt)
{
tfNachrichtMouseClicked(evt);
}
});
tfNachricht.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
tfNachrichtActionPerformed(evt);
}
});
getContentPane().add(tfNachricht, java.awt.BorderLayout.PAGE_END);
jScrollPane2.setPreferredSize(new java.awt.Dimension(238, 150));
txtChat.setColumns(20);
txtChat.setRows(5);
txtChat.setText("Chat:");
jScrollPane2.setViewportView(txtChat);
getContentPane().add(jScrollPane2, java.awt.BorderLayout.CENTER);
getContentPane().add(gvZeichenflaeche, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>//GEN-END:initComponents
@@ -145,21 +126,11 @@ public class ChatView extends javax.swing.JFrame
// TODO add your handling code here:
}//GEN-LAST:event_BtnServerActionPerformed
private void tfNachrichtActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_tfNachrichtActionPerformed
{//GEN-HEADEREND:event_tfNachrichtActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_tfNachrichtActionPerformed
private void formWindowOpened(java.awt.event.WindowEvent evt)//GEN-FIRST:event_formWindowOpened
{//GEN-HEADEREND:event_formWindowOpened
dialogChooseMode.show();
}//GEN-LAST:event_formWindowOpened
private void tfNachrichtMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_tfNachrichtMouseClicked
{//GEN-HEADEREND:event_tfNachrichtMouseClicked
}//GEN-LAST:event_tfNachrichtMouseClicked
private void BtnConnectActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_BtnConnectActionPerformed
{//GEN-HEADEREND:event_BtnConnectActionPerformed
// TODO add your handling code here:
@@ -220,11 +191,9 @@ public class ChatView extends javax.swing.JFrame
private javax.swing.ButtonGroup BtnGrpMode;
private javax.swing.JRadioButton BtnServer;
private javax.swing.JDialog dialogChooseMode;
private ChatProgramm.view.GrafikView gvZeichenflaeche;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JLabel lblMode;
private javax.swing.JTextField tfNachricht;
private javax.swing.JTextArea txtChat;
// End of variables declaration//GEN-END:variables
/**
@@ -267,19 +236,19 @@ public class ChatView extends javax.swing.JFrame
return dialogChooseMode;
}
/**
* @return the tfNachricht
*/
public javax.swing.JTextField getTfNachricht()
{
return tfNachricht;
}
/**
* @return the txtChat
*/
public javax.swing.JTextArea getTxtChat()
{
return txtChat;
}
// /**
// * @return the tfNachricht
// */
// public javax.swing.JTextField getTfNachricht()
// {
// return tfNachricht;
// }
//
// /**
// * @return the txtChat
// */
// public javax.swing.JTextArea getTxtChat()
// {
// return txtChat;
// }
}
+112
View File
@@ -0,0 +1,112 @@
/*
* 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 ChatProgramm.view;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Line2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.DialogTypeSelection;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import ChatProgramm.model.GrafikDaten;
import ChatProgramm.util.OhmLogger;
/**
*
* @author le
*/
public class GrafikView extends JComponent
{
private static Logger lg = OhmLogger.getLogger();
private static Dimension EINS = new Dimension(1, 1); // Dimension ist eine Klasse die width udn height hält
private Rectangle2D.Float pixel;
private Line2D.Float line;
private GrafikDaten model;
private Point from = null;
private Point to = null;
public GrafikView()
{
pixel = new Rectangle2D.Float();
line = new Line2D.Float();
}
public void setModel(GrafikDaten model)
{
this.model = model;
}
/**
* Zeichnet den aktuellen Pfad (solange die maus gedrückt gehalten wird)
* @param p -> Der aktuelle punkt als x-y-Koordinate
*/
public void drawFigur()
{
Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich!
drawPath(model.getFiguren().getLast().getPunkte(),g2);
g2.dispose(); //SEEEEHHHHRRRR WICHTIG!!!!!!!
}
public void drawPoint()
{
Graphics2D g2 = (Graphics2D)this.getGraphics(); // gefährlich!
drawPath(model.getPunkte(),g2);
g2.dispose(); //SEEEEHHHHRRRR WICHTIG!!!!!!!
}
/**
* Hier werden alle Pfade aus dem model neu gezeichnet
* Jedes mal wenn die Maus los gelassen wird, wird dder aktuelle Pfad gespeichert
* @param g
*/
@Override
public void paintComponent(Graphics g)
{
if (model == null) return;
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
model.getFiguren().forEach(figuren->
{
drawPath(figuren.getPunkte(),g2);
});
}
public void drawPath(List<Point> path, Graphics2D g2){
from = path.getFirst();
to = null;
path.forEach(point->
{
to = point;
line.setLine(from,to);
g2.draw(line);
from = to;
});
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
log.level=INFO
log.directory=../Aufgabe7_bandit
log.filename=ohmLog
# log.directory=../Aufgabe7_bandit
# log.filename=ohmLog
# Beispiel f\u00fcr verschiedene Level f\u00fcr unterschiedliche Pakete
# log.level.bandit.Zahlengenerator=FINE