/* * JFrame.java * * Created on 30 January 2001, 23:56 */ package senseiTests.chat.rmi; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; /** * * @author LuisM Pena * @version 1.0 */ public class ChatFrame extends javax.swing.JFrame implements Runnable { /** Creates new form JFrame */ public ChatFrame(ChatMember user) { this.user=user; name="Member n." + (++instances); valid=true; initComponents (); enableMessages(false); pack (); setLocation(posX, posY); show(); java.awt.Dimension d=getSize(); posX+=d.getWidth(); if (posX+d.getWidth()>MAX_X) { posX=0; posY+=d.getHeight(); if (posY+d.getHeight()>MAX_Y) posY=0; } new Thread(this).start(); } /** 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 FormEditor. */ private void initComponents()//GEN-BEGIN:initComponents { jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); messageField = new javax.swing.JTextField(); sendButton = new javax.swing.JButton(); jPanel5 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); chatTextArea = new javax.swing.JTextArea(); getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), 1)); setName(""); setTitle("Chat Members"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } } ); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, 0)); jPanel1.setBorder(new javax.swing.border.CompoundBorder( new javax.swing.border.TitledBorder("Input"), new javax.swing.border.EtchedBorder())); jPanel1.setMaximumSize(new java.awt.Dimension(2147483647, 250)); jLabel1.setText("Message:"); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jPanel1.add(jLabel1); jPanel1.add(messageField); sendButton.setText("Send"); sendButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sendButtonActionPerformed(evt); } } ); jPanel1.add(sendButton); getContentPane().add(jPanel1); jPanel5.setLayout(new java.awt.GridLayout(0, 1)); jPanel5.setBorder(new javax.swing.border.CompoundBorder( new javax.swing.border.TitledBorder( new javax.swing.border.EtchedBorder(), "Group chat"), new javax.swing.border.EtchedBorder())); jScrollPane1.setPreferredSize(new java.awt.Dimension(300, 300)); chatTextArea.setEditable(false); jScrollPane1.setViewportView(chatTextArea); jPanel5.add(jScrollPane1); getContentPane().add(jPanel5); }//GEN-END:initComponents private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) { final String text=messageField.getText(); new Thread(){ public void run() { user.ownMessage(text); } }.start(); Thread.yield(); messageField.setText(""); } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm if (valid) { valid=false; user.exiting(); if (--instances>0) dispose(); else System.exit (0); } }//GEN-LAST:event_exitForm public void addChatMessage(final java.lang.String chatMessage) { SwingUtilities.invokeLater(new Runnable(){ public void run() { chatTextArea.append(chatMessage+"\n"); chatTextArea.setCaretPosition(chatTextArea.getDocument().getLength()-1); } }); } public void error(java.lang.String message) { if (valid) { JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE); exitForm(null); } } public void enableMessages(final boolean enable) { enabled=enable; SwingUtilities.invokeLater(new Runnable(){ public void run() { messageField.setEnabled(enable); sendButton.setEnabled(enable); } }); } public void run() { try { int i=0; Thread thread = Thread.currentThread(); while(valid) { if (enabled) user.ownMessage("Automatic message number " + (++i) + " from " + name); thread.sleep((long)(SLEEP_PERIOD*rnd.nextDouble())); } } catch(InterruptedException ex) { error(ex.getMessage()); } } ChatMember user; String name; boolean valid, enabled; java.util.Random rnd=new java.util.Random(); static int instances=0; static int posX=0; static int posY=0; static final int MAX_X=1240; static final int MAX_Y=1024; static final long SLEEP_PERIOD=20000; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel jPanel1; private javax.swing.JLabel jLabel1; private javax.swing.JTextField messageField; private javax.swing.JButton sendButton; private javax.swing.JPanel jPanel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea chatTextArea; // End of variables declaration//GEN-END:variables }