diff --git a/src/ChatProgramm/controller/CommandController.java b/src/ChatProgramm/controller/CommandController.java index 94a4819..7a1236f 100644 --- a/src/ChatProgramm/controller/CommandController.java +++ b/src/ChatProgramm/controller/CommandController.java @@ -29,13 +29,14 @@ public class CommandController implements ActionListener{ public void registerEvents(){ view.getBtnConnect().addActionListener(this); - view.getTfNachricht().addActionListener(this); + //ToDo: muss auf gFrame referenzieren + //view.getTfNachricht().addActionListener(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.getTfNachricht(), commandSend); } /** diff --git a/src/ChatProgramm/controller/commands/CommandSend.java b/src/ChatProgramm/controller/commands/CommandSend.java index 38c4627..70bda03 100644 --- a/src/ChatProgramm/controller/commands/CommandSend.java +++ b/src/ChatProgramm/controller/commands/CommandSend.java @@ -34,17 +34,21 @@ public class CommandSend implements CommandInterface public CommandSend(ChatView view) { this.view = view; - this.eingabeFeld = view.getTfNachricht(); + //ToDo: Hier muss auch der gFrame referenziert werden + //this.eingabeFeld = view.getTfNachricht(); transmitterInterface = null; } @Override public void execute() { - if(transmitterInterface != null && !eingabeFeld.getText().isEmpty()){ - transmitterInterface.send(eingabeFeld.getText()); - eingabeFeld.setText(""); - } + //ToDo in dieser methode muss die Figur serialisiert werden und zum + //übermitteln bereitgestellt werden + +// if(transmitterInterface != null && !eingabeFeld.getText().isEmpty()){ +// transmitterInterface.send(eingabeFeld.getText()); +// eingabeFeld.setText(""); +// } } diff --git a/src/ChatProgramm/model/ReceiveAdapter.java b/src/ChatProgramm/model/ReceiveAdapter.java index 20dd7de..50d0d4d 100644 --- a/src/ChatProgramm/model/ReceiveAdapter.java +++ b/src/ChatProgramm/model/ReceiveAdapter.java @@ -29,8 +29,10 @@ public class ReceiveAdapter implements Subscriber { @Override public void onNext(Nachricht item) { - - view.getTxtChat().append(item.getNachricht()); + + //ToDo: hier muss der gFrame aufgerufen werden + // evtl muss die Figur aber zuerst serialisiert werden + //view.getTxtChat().append(item.getNachricht()); this.subscription.request(1); } diff --git a/src/ChatProgramm/view/ChatView.form b/src/ChatProgramm/view/ChatView.form index 6ad137b..7a3ee69 100644 --- a/src/ChatProgramm/view/ChatView.form +++ b/src/ChatProgramm/view/ChatView.form @@ -107,45 +107,25 @@ - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + + + + + + + + + + + + diff --git a/src/ChatProgramm/view/ChatView.java b/src/ChatProgramm/view/ChatView.java index 6b6f782..8c27d57 100644 --- a/src/ChatProgramm/view/ChatView.java +++ b/src/ChatProgramm/view/ChatView.java @@ -35,9 +35,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(); + jPanel2 = new javax.swing.JPanel(); dialogChooseMode.setMinimumSize(new java.awt.Dimension(278, 208)); dialogChooseMode.getContentPane().setLayout(new java.awt.GridLayout(0, 1)); @@ -97,27 +95,18 @@ public class ChatView extends javax.swing.JFrame } }); - 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); + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 400, Short.MAX_VALUE) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 300, Short.MAX_VALUE) + ); - 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(jPanel2, java.awt.BorderLayout.CENTER); pack(); }// //GEN-END:initComponents @@ -132,21 +121,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: @@ -208,10 +187,8 @@ public class ChatView extends javax.swing.JFrame private javax.swing.JRadioButton BtnServer; private javax.swing.JDialog dialogChooseMode; private javax.swing.JPanel jPanel1; - private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JPanel jPanel2; private javax.swing.JLabel lblMode; - private javax.swing.JTextField tfNachricht; - private javax.swing.JTextArea txtChat; // End of variables declaration//GEN-END:variables /** @@ -254,19 +231,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; +// } } diff --git a/src/ChatProgramm/view/GrafikFrame.form b/src/ChatProgramm/view/GrafikFrame.form new file mode 100644 index 0000000..87c960a --- /dev/null +++ b/src/ChatProgramm/view/GrafikFrame.form @@ -0,0 +1,89 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ChatProgramm/view/GrafikFrame.java b/src/ChatProgramm/view/GrafikFrame.java new file mode 100644 index 0000000..4a8e370 --- /dev/null +++ b/src/ChatProgramm/view/GrafikFrame.java @@ -0,0 +1,165 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template + */ +package ChatProgramm.view; + +/** + * + * @author le + */ +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 + */ + public mvcgrafik.view.GrafikView getgZeichenflaeche() + { + return gZeichenflaeche; + } + + /** + * Creates new form GrafikFrame + */ + public GrafikFrame() + { + 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() { + + 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(); + btnPrint = 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); + + btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mvcgrafik/view/Print24.gif"))); // NOI18N + btnPrint.setToolTipText("Print File"); + btnPrint.setFocusable(false); + btnPrint.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + btnPrint.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + jToolBar1.add(btnPrint); + + getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START); + + setSize(new java.awt.Dimension(540, 412)); + setLocationRelativeTo(null); + }// //GEN-END:initComponents + + /** + * @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(GrafikFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (InstantiationException ex) + { + java.util.logging.Logger.getLogger(GrafikFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + java.util.logging.Logger.getLogger(GrafikFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (javax.swing.UnsupportedLookAndFeelException ex) + { + java.util.logging.Logger.getLogger(GrafikFrame.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 GrafikFrame().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JFileChooser FcFileChooser; + private javax.swing.JButton btnFileOpen; + private javax.swing.JButton btnFileSave; + private javax.swing.JButton btnPrint; + private mvcgrafik.view.GrafikView gZeichenflaeche; + private javax.swing.JToolBar jToolBar1; + // End of variables declaration//GEN-END:variables + + /** + * @return the btnPrint + */ + public javax.swing.JButton getBtnPrint() { + return btnPrint; + } +} diff --git a/src/ChatProgramm/view/GrafikView.java b/src/ChatProgramm/view/GrafikView.java new file mode 100644 index 0000000..969525c --- /dev/null +++ b/src/ChatProgramm/view/GrafikView.java @@ -0,0 +1,143 @@ +/* + * 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.GrafikModel; +import ChatProgramm.util.OhmLogger; + + +/** + * + * @author le + */ +public class GrafikView extends JComponent implements Printable +{ + 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 GrafikModel model; + + private Point from = null; + private Point to = null; + + public GrafikView() + { + pixel = new Rectangle2D.Float(); + line = new Line2D.Float(); + } + + public void setModel(GrafikModel 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 drawPoint(Point p) + { + 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 path, Graphics2D g2){ + from = path.getFirst(); + to = null; + + path.forEach(point-> + { + to = point; + line.setLine(from,to); + g2.draw(line); + from = to; + + }); + } + + + public void doPrint() + { + HashPrintRequestAttributeSet printSet = + new HashPrintRequestAttributeSet(); + printSet.add(DialogTypeSelection.NATIVE); + PrinterJob pj = PrinterJob.getPrinterJob(); + pj.setPrintable(this); + //Dialog + if (pj.printDialog(printSet)) + { + try + { + pj.print(printSet); + } + catch (Exception ex) + { + JOptionPane.showMessageDialog(this, ex.toString()); + } + } + } + + @Override + public int print(Graphics gp, PageFormat pf, int pageIndex) throws PrinterException + { + Graphics2D g2p = (Graphics2D)gp; + if (pageIndex == 0) + { + g2p.translate(pf.getImageableX(), pf.getImageableY()); + g2p.scale(pf.getImageableWidth() / this.getWidth(), + pf.getImageableHeight() / this.getHeight()); + super.print(g2p); + return Printable.PAGE_EXISTS; + } + else + { + return Printable.NO_SUCH_PAGE; // wichtig sonst Papiervernichtung + } + } +}