Advertisement
Guest User

ChatFrame

a guest
Dec 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.59 KB | None | 0 0
  1. package com.ui;
  2.  
  3. import com.socket.History;
  4. import com.socket.Message;
  5. import com.socket.SocketClient;
  6. import java.awt.event.WindowEvent;
  7. import java.awt.event.WindowListener;
  8. import java.io.File;
  9. import javax.swing.DefaultListModel;
  10. import javax.swing.JFileChooser;
  11. import javax.swing.JFrame;
  12. import javax.swing.UIManager;
  13. import oracle.jrockit.jfr.JFR;
  14.  
  15. public class ChatFrame extends javax.swing.JFrame {
  16.  
  17.     public SocketClient client;
  18.     public int port;
  19.     public String serverAddr, username, password;
  20.     public Thread clientThread;
  21.     public DefaultListModel model;
  22.     public File file;
  23.     public String historyFile = "D:/History.xml";
  24.     public HistoryFrame historyFrame;
  25.     public History hist;
  26.    
  27.     public ChatFrame() {
  28.         initComponents();
  29.         this.setTitle("jMessenger");
  30.         model.addElement("All");
  31.         jList1.setSelectedIndex(0);
  32.        
  33.         jTextField6.setEditable(false);
  34.        
  35.         this.addWindowListener(new WindowListener() {
  36.  
  37.             @Override public void windowOpened(WindowEvent e) {}
  38.             @Override public void windowClosing(WindowEvent e) { try{ client.send(new Message("message", username, ".bye", "SERVER")); clientThread.stop();  }catch(Exception ex){} }
  39.             @Override public void windowClosed(WindowEvent e) {}
  40.             @Override public void windowIconified(WindowEvent e) {}
  41.             @Override public void windowDeiconified(WindowEvent e) {}
  42.             @Override public void windowActivated(WindowEvent e) {}
  43.             @Override public void windowDeactivated(WindowEvent e) {}
  44.         });
  45.        
  46.         hist = new History(historyFile);
  47.     }
  48.    
  49.     public boolean isWin32(){
  50.         return System.getProperty("os.name").startsWith("Windows");
  51.     }
  52.  
  53.     @SuppressWarnings("unchecked")
  54.     // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  55.     private void initComponents() {
  56.  
  57.         jLabel1 = new javax.swing.JLabel();
  58.         jTextField1 = new javax.swing.JTextField();
  59.         jLabel2 = new javax.swing.JLabel();
  60.         jTextField2 = new javax.swing.JTextField();
  61.         jButton1 = new javax.swing.JButton();
  62.         jTextField3 = new javax.swing.JTextField();
  63.         jLabel3 = new javax.swing.JLabel();
  64.         jLabel4 = new javax.swing.JLabel();
  65.         jButton3 = new javax.swing.JButton();
  66.         jPasswordField1 = new javax.swing.JPasswordField();
  67.         jSeparator1 = new javax.swing.JSeparator();
  68.         jScrollPane1 = new javax.swing.JScrollPane();
  69.         jTextArea1 = new javax.swing.JTextArea();
  70.         jScrollPane2 = new javax.swing.JScrollPane();
  71.         jList1 = new javax.swing.JList();
  72.         jLabel5 = new javax.swing.JLabel();
  73.         jTextField4 = new javax.swing.JTextField();
  74.         jButton4 = new javax.swing.JButton();
  75.         jButton2 = new javax.swing.JButton();
  76.         jSeparator2 = new javax.swing.JSeparator();
  77.         jTextField5 = new javax.swing.JTextField();
  78.         jButton5 = new javax.swing.JButton();
  79.         jButton6 = new javax.swing.JButton();
  80.         jLabel6 = new javax.swing.JLabel();
  81.         jLabel7 = new javax.swing.JLabel();
  82.         jTextField6 = new javax.swing.JTextField();
  83.         jButton7 = new javax.swing.JButton();
  84.         jButton8 = new javax.swing.JButton();
  85.  
  86.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  87.  
  88.         jLabel1.setText("Host Address : ");
  89.  
  90.         jLabel2.setText("Host Port : ");
  91.  
  92.         jButton1.setText("Connect");
  93.         jButton1.addActionListener(new java.awt.event.ActionListener() {
  94.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  95.                 jButton1ActionPerformed(evt);
  96.             }
  97.         });
  98.  
  99.         jTextField3.setEnabled(false);
  100.  
  101.         jLabel3.setText("Password :");
  102.  
  103.         jLabel4.setText("Username :");
  104.  
  105.         jButton3.setText("SignUp");
  106.         jButton3.setEnabled(false);
  107.         jButton3.addActionListener(new java.awt.event.ActionListener() {
  108.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  109.                 jButton3ActionPerformed(evt);
  110.             }
  111.         });
  112.  
  113.         jPasswordField1.setEnabled(false);
  114.  
  115.         jTextArea1.setColumns(20);
  116.         jTextArea1.setFont(new java.awt.Font("Consolas", 0, 12)); // NOI18N
  117.         jTextArea1.setRows(5);
  118.         jScrollPane1.setViewportView(jTextArea1);
  119.  
  120.         jList1.setModel((model = new DefaultListModel()));
  121.         jScrollPane2.setViewportView(jList1);
  122.  
  123.         jLabel5.setText("Message : ");
  124.  
  125.         jButton4.setText("Send Message ");
  126.         jButton4.setEnabled(false);
  127.         jButton4.addActionListener(new java.awt.event.ActionListener() {
  128.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  129.                 jButton4ActionPerformed(evt);
  130.             }
  131.         });
  132.  
  133.         jButton2.setText("Login");
  134.         jButton2.setEnabled(false);
  135.         jButton2.addActionListener(new java.awt.event.ActionListener() {
  136.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  137.                 jButton2ActionPerformed(evt);
  138.             }
  139.         });
  140.  
  141.         jButton5.setText("...");
  142.         jButton5.setEnabled(false);
  143.         jButton5.addActionListener(new java.awt.event.ActionListener() {
  144.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  145.                 jButton5ActionPerformed(evt);
  146.             }
  147.         });
  148.  
  149.         jButton6.setText("Send");
  150.         jButton6.setEnabled(false);
  151.         jButton6.addActionListener(new java.awt.event.ActionListener() {
  152.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  153.                 jButton6ActionPerformed(evt);
  154.             }
  155.         });
  156.  
  157.         jLabel6.setText("File :");
  158.  
  159.         jLabel7.setText("History File :");
  160.  
  161.         jButton7.setText("...");
  162.         jButton7.setEnabled(false);
  163.         jButton7.addActionListener(new java.awt.event.ActionListener() {
  164.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  165.                 jButton7ActionPerformed(evt);
  166.             }
  167.         });
  168.  
  169.         jButton8.setText("Show");
  170.         jButton8.setEnabled(false);
  171.         jButton8.addActionListener(new java.awt.event.ActionListener() {
  172.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  173.                 jButton8ActionPerformed(evt);
  174.             }
  175.         });
  176.  
  177.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  178.         getContentPane().setLayout(layout);
  179.         layout.setHorizontalGroup(
  180.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  181.             .addGroup(layout.createSequentialGroup()
  182.                 .addContainerGap()
  183.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  184.                     .addComponent(jSeparator2)
  185.                     .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING)
  186.                     .addGroup(layout.createSequentialGroup()
  187.                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  188.                             .addComponent(jLabel1)
  189.                             .addComponent(jLabel4)
  190.                             .addComponent(jLabel7))
  191.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  192.                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  193.                             .addGroup(layout.createSequentialGroup()
  194.                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  195.                                     .addComponent(jTextField3)
  196.                                     .addComponent(jTextField1))
  197.                                 .addGap(18, 18, 18)
  198.                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  199.                                     .addComponent(jLabel2)
  200.                                     .addComponent(jLabel3))
  201.                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  202.                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  203.                                     .addComponent(jTextField2)
  204.                                     .addComponent(jPasswordField1)))
  205.                             .addComponent(jTextField6))
  206.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  207.                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  208.                             .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  209.                             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  210.                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  211.                                     .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
  212.                                     .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
  213.                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  214.                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  215.                                     .addComponent(jButton8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  216.                                     .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)))))
  217.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  218.                         .addComponent(jScrollPane1)
  219.                         .addGap(18, 18, 18)
  220.                         .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE))
  221.                     .addGroup(layout.createSequentialGroup()
  222.                         .addGap(23, 23, 23)
  223.                         .addComponent(jLabel6)
  224.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  225.                         .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 378, javax.swing.GroupLayout.PREFERRED_SIZE)
  226.                         .addGap(18, 18, 18)
  227.                         .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
  228.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  229.                         .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))
  230.                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  231.                         .addComponent(jLabel5)
  232.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  233.                         .addComponent(jTextField4)
  234.                         .addGap(18, 18, 18)
  235.                         .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE)))
  236.                 .addContainerGap())
  237.         );
  238.         layout.setVerticalGroup(
  239.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  240.             .addGroup(layout.createSequentialGroup()
  241.                 .addContainerGap()
  242.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  243.                     .addComponent(jLabel1)
  244.                     .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  245.                     .addComponent(jLabel2)
  246.                     .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  247.                     .addComponent(jButton1))
  248.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  249.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  250.                     .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  251.                     .addComponent(jLabel3)
  252.                     .addComponent(jLabel4)
  253.                     .addComponent(jButton3)
  254.                     .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  255.                     .addComponent(jButton2))
  256.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  257.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  258.                     .addComponent(jLabel7)
  259.                     .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  260.                     .addComponent(jButton7)
  261.                     .addComponent(jButton8))
  262.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  263.                 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
  264.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  265.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  266.                     .addComponent(jScrollPane1)
  267.                     .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE))
  268.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  269.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  270.                     .addComponent(jButton4)
  271.                     .addComponent(jLabel5)
  272.                     .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  273.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  274.                 .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
  275.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  276.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
  277.                     .addComponent(jButton6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  278.                     .addComponent(jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  279.                     .addComponent(jLabel6)
  280.                     .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  281.                 .addContainerGap())
  282.         );
  283.  
  284.         pack();
  285.     }// </editor-fold>                        
  286.  
  287.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  288.         serverAddr = jTextField1.getText(); port = Integer.parseInt(jTextField2.getText());
  289.        
  290.         if(!serverAddr.isEmpty() && !jTextField2.getText().isEmpty()){
  291.             try{
  292.                 client = new SocketClient(this);
  293.                 clientThread = new Thread(client);
  294.                 clientThread.start();
  295.                 client.send(new Message("test", "testUser", "testContent", "SERVER"));
  296.             }
  297.             catch(Exception ex){
  298.                 jTextArea1.append("[Application > Me] : Server not found\n");
  299.             }
  300.         }
  301.     }                                        
  302.  
  303.     private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  304.         username = jTextField3.getText();
  305.         password = jPasswordField1.getText();
  306.        
  307.         if(!username.isEmpty() && !password.isEmpty()){
  308.             client.send(new Message("login", username, password, "SERVER"));
  309.         }
  310.     }                                        
  311.  
  312.     private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  313.         String msg = jTextField4.getText();
  314.         String target = jList1.getSelectedValue().toString();
  315.        
  316.         if(!msg.isEmpty() && !target.isEmpty()){
  317.             jTextField4.setText("");
  318.             client.send(new Message("message", username, msg, target));
  319.         }
  320.     }                                        
  321.  
  322.     private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  323.         username = jTextField3.getText();
  324.         password = jPasswordField1.getText();
  325.        
  326.         if(!username.isEmpty() && !password.isEmpty()){
  327.             client.send(new Message("signup", username, password, "SERVER"));
  328.         }
  329.     }                                        
  330.  
  331.     private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  332.         JFileChooser fileChooser = new JFileChooser();
  333.         fileChooser.showDialog(this, "Select File");
  334.         file = fileChooser.getSelectedFile();
  335.        
  336.         if(file != null){
  337.             if(!file.getName().isEmpty()){
  338.                 jButton6.setEnabled(true); String str;
  339.                
  340.                 if(jTextField5.getText().length() > 30){
  341.                     String t = file.getPath();
  342.                     str = t.substring(0, 20) + " [...] " + t.substring(t.length() - 20, t.length());
  343.                 }
  344.                 else{
  345.                     str = file.getPath();
  346.                 }
  347.                 jTextField5.setText(str);
  348.             }
  349.         }
  350.     }                                        
  351.  
  352.     private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  353.             long size = file.length();
  354.             if(size < 120 * 1024 * 1024){
  355.                 client.send(new Message("upload_req", username, file.getName(), jList1.getSelectedValue().toString()));
  356.             }
  357.             else{
  358.                 jTextArea1.append("[Application > Me] : File is size too large\n");
  359.             }
  360.     }                                        
  361.  
  362.     private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  363.         JFileChooser jf = new JFileChooser();
  364.         jf.showDialog(this, "Select File");
  365.        
  366.         if(!jf.getSelectedFile().getPath().isEmpty()){
  367.             historyFile = jf.getSelectedFile().getPath();
  368.             if(this.isWin32()){
  369.                 historyFile = historyFile.replace("/", "\\");
  370.             }
  371.             jTextField6.setText(historyFile);
  372.             jTextField6.setEditable(false);
  373.             jButton7.setEnabled(false);
  374.             jButton8.setEnabled(true);
  375.             hist = new History(historyFile);
  376.                    
  377.             historyFrame = new HistoryFrame(hist);
  378.             historyFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  379.             historyFrame.setVisible(false);
  380.         }
  381.     }                                        
  382.  
  383.     private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  384.         historyFrame.setLocation(this.getLocation());
  385.         historyFrame.setVisible(true);
  386.     }                                        
  387.  
  388.     public static void main(String args[]) {
  389.         try {
  390.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  391.         }
  392.         catch(Exception ex){
  393.             System.out.println("Look & Feel exception");
  394.         }
  395.        
  396.         java.awt.EventQueue.invokeLater(new Runnable() {
  397.             public void run() {
  398.                 new ChatFrame().setVisible(true);
  399.             }
  400.         });
  401.     }
  402.     // Variables declaration - do not modify                    
  403.     public javax.swing.JButton jButton1;
  404.     public javax.swing.JButton jButton2;
  405.     public javax.swing.JButton jButton3;
  406.     public javax.swing.JButton jButton4;
  407.     public javax.swing.JButton jButton5;
  408.     public javax.swing.JButton jButton6;
  409.     public javax.swing.JButton jButton7;
  410.     public javax.swing.JButton jButton8;
  411.     private javax.swing.JLabel jLabel1;
  412.     private javax.swing.JLabel jLabel2;
  413.     private javax.swing.JLabel jLabel3;
  414.     private javax.swing.JLabel jLabel4;
  415.     private javax.swing.JLabel jLabel5;
  416.     private javax.swing.JLabel jLabel6;
  417.     private javax.swing.JLabel jLabel7;
  418.     public javax.swing.JList jList1;
  419.     public javax.swing.JPasswordField jPasswordField1;
  420.     private javax.swing.JScrollPane jScrollPane1;
  421.     private javax.swing.JScrollPane jScrollPane2;
  422.     private javax.swing.JSeparator jSeparator1;
  423.     private javax.swing.JSeparator jSeparator2;
  424.     public javax.swing.JTextArea jTextArea1;
  425.     public javax.swing.JTextField jTextField1;
  426.     public javax.swing.JTextField jTextField2;
  427.     public javax.swing.JTextField jTextField3;
  428.     public javax.swing.JTextField jTextField4;
  429.     public javax.swing.JTextField jTextField5;
  430.     public javax.swing.JTextField jTextField6;
  431.     // End of variables declaration                  
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement