rendered paste bodypackage edu.elon.eim;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import org.jvnet.substance.SubstanceLookAndFeel;
/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
* Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose
* whatever) then you should purchase a license for each developer using
* Jigloo. Please visit www.cloudgarden.com for details. Use of Jigloo implies
* acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
* PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY
* FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class EimClient extends javax.swing.JFrame implements Runnable {
private class LLListener implements ActionListener {
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase("Login")) {
try {
s = new Socket(jHostTextField.getText(), Integer
.parseInt(jPortTextField.getText()));
makeStreamsThreads(s);
print.println("LOGIN " + jUsrTextField.getText());
} catch (Exception e1) {
JOptionPane.showMessageDialog(getParent(),
"Invalid Login - check host and port",
"Invalid Login", JOptionPane.ERROR_MESSAGE);
return;
}
jChatInput.setEditable(true);
jSendText.setEnabled(true);
jLLButton.setText("Logout");
jHostTextField.setEditable(false);
jPortTextField.setEditable(false);
jUsrTextField.setEditable(false);
} else if (e.getActionCommand().equalsIgnoreCase("Logout")) {
jChatInput.setEditable(false);
jSendText.setEnabled(false);
jHostTextField.setEditable(true);
jPortTextField.setEditable(true);
jUsrTextField.setEditable(true);
jLLButton.setText("Login");
try {
print.println("LOGOUT " + jUsrTextField.getText());
Thread.sleep(750);
cleanup();
} catch (Exception e1) {
}
}
}
}
private class SendListener implements ActionListener {
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
try {
if (jChatInput.getText().equalsIgnoreCase("/clear")) {
jChatArea.setText("");
jChatInput.setText("");
return;
}
print.println("CHAT " + jChatInput.getText());
} catch (Exception ex) {
}
jChatInput.setText("");
}
}
private static Socket s;
private static final long serialVersionUID = 1L;
private InputStream i;
private JTextArea jChatArea;
private JTextArea jChatInput;
private JTextField jHostTextField;
private JButton jLLButton;
private JPanel jLoginPanel;
private JTextField jPortTextField;
private JScrollPane jScrollPane1;
private JPanel jSendArea;
private JButton jSendText;
private JTextField jUsrTextField;
private Thread listener;
private OutputStream o;
private PrintWriter print;
private Scanner scan;
/**
*
*/
public EimClient() {
super();
initGUI();
}
/**
* Auto-generated main method to display this JFrame
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
UIManager.setLookAndFeel(new SubstanceLookAndFeel());
System.setProperty("sun.awt.noerasebackground", "true");
// LiquidLookAndFeel.setLiquidDecorations(true, "mac");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EimClient inst = new EimClient();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
inst.setResizable(false);
}
});
}
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
while (true) {
String line = scan.nextLine();
JScrollBar sb = jScrollPane1.getVerticalScrollBar();
sb.setValue(sb.getMaximum());
jChatArea.append(line + "\n");
}
} catch (Exception ex) {
if (jSendText.isEnabled()) {
JScrollBar sb = jScrollPane1.getVerticalScrollBar();
sb.setValue(sb.getMaximum());
jChatArea
.append("Connection Lost... Login to Reconnect" + "\n");
jChatInput.setEditable(false);
jSendText.setEnabled(false);
jHostTextField.setEditable(true);
jPortTextField.setEditable(true);
jUsrTextField.setEditable(true);
jLLButton.setText("Login");
listener.interrupt();
}
} finally {
try {
listener = null;
print.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private void cleanup() throws Exception {
}
private void initGUI() {
try {
setTitle("EIM");
setLayout(new BorderLayout());
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
makeLogonPanel();
makeChatAreaPanel();
makeSendTextPanel();
pack();
this.setSize(350, 600);
} catch (Exception e) {
e.printStackTrace();
}
}
private void makeChatAreaPanel() {
JPanel jChatPanel = new JPanel();
FlowLayout jChatPanelLayout = new FlowLayout();
jChatPanel.setLayout(jChatPanelLayout);
add(jChatPanel, BorderLayout.CENTER);
jChatArea = new JTextArea();
jChatArea.setEditable(false);
jChatArea.setLineWrap(true);
jChatArea.setWrapStyleWord(true);
jScrollPane1 = new JScrollPane(jChatArea);
jScrollPane1.setPreferredSize(new java.awt.Dimension(332, 340));
jScrollPane1
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane1
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jChatPanel.add(jScrollPane1);
}
private void makejLoginPanelcomponents() {
GridBagLayout panelLayout = new GridBagLayout();
panelLayout.columnWeights = new double[] { 1.0, 1.0, 1.0 };
panelLayout.columnWidths = new int[] { 150, 125, 125 };
panelLayout.rowWeights = new double[] { 1.0, 1.0, 1.0 };
panelLayout.rowHeights = new int[] {};
jLoginPanel.setLayout(panelLayout);
JLabel jHostLabel = new JLabel();
jHostLabel.setText("Host: ");
jHostLabel.setHorizontalAlignment(SwingConstants.RIGHT);
JLabel jPortLabel = new JLabel();
jPortLabel.setText("Port: ");
jPortLabel.setHorizontalAlignment(SwingConstants.RIGHT);
JLabel jUsrLabel = new JLabel();
jUsrLabel.setText("Username: ");
jUsrLabel.setHorizontalAlignment(SwingConstants.RIGHT);
jHostTextField = new JTextField();
jHostTextField.setName("Host");
jPortTextField = new JTextField();
jPortTextField.setName("Port");
jUsrTextField = new JTextField();
jUsrTextField.setName("Username");
jLLButton = new JButton();
jLLButton.setText("Login");
jLLButton.addActionListener(new LLListener());
jLoginPanel.add(jHostLabel, new GridBagConstraints(0, 0, 1, 1, 1.0,
1.0, GridBagConstraints.EAST, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 1, 1));
jLoginPanel.add(jHostTextField, new GridBagConstraints(1, 0, 2, 1, 1.0,
1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
jLoginPanel.add(jPortLabel, new GridBagConstraints(0, 1, 1, 1, 1.0,
1.0, GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
jLoginPanel.add(jPortTextField, new GridBagConstraints(1, 1, 2, 1, 1.0,
1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
jLoginPanel.add(jUsrLabel, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,
0, 0, 0), 0, 0));
jLoginPanel.add(jUsrTextField, new GridBagConstraints(1, 2, 2, 1, 1.0,
1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
jLoginPanel.add(jLLButton, new GridBagConstraints(2, 3, 1, 2, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(
0, 0, 0, 0), 0, 0));
GridBagConstraints constrnts = null;
constrnts = new GridBagConstraints();
constrnts.gridx = 0;
constrnts.gridy = 0;
constrnts.fill = GridBagConstraints.BOTH;
constrnts.anchor = GridBagConstraints.EAST;
constrnts.gridx++;
constrnts.anchor = GridBagConstraints.WEST;
constrnts.fill = GridBagConstraints.BOTH;
constrnts.gridx = 0;
constrnts.gridy++;
constrnts.anchor = GridBagConstraints.EAST;
constrnts.fill = GridBagConstraints.BOTH;
constrnts.gridx++;
constrnts.anchor = GridBagConstraints.WEST;
constrnts.fill = GridBagConstraints.BOTH;
constrnts.gridx = 0;
constrnts.gridy++;
constrnts.anchor = GridBagConstraints.EAST;
constrnts.fill = GridBagConstraints.BOTH;
constrnts.gridx++;
constrnts.anchor = GridBagConstraints.WEST;
constrnts.fill = GridBagConstraints.BOTH;
}
private void makeLogonPanel() {
jLoginPanel = new JPanel();
add(jLoginPanel, BorderLayout.NORTH);
jLoginPanel.setPreferredSize(new java.awt.Dimension(334, 118));
makejLoginPanelcomponents();
TitledBorder title = BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(Color.black, 2), "Login", 1, 2);
jLoginPanel.setBorder(title);
}
private void makeSendTextPanel() {
jSendArea = new JPanel();
add(jSendArea, BorderLayout.SOUTH);
FlowLayout jPanel1Layout = new FlowLayout();
jPanel1Layout.setAlignment(FlowLayout.RIGHT);
jSendArea.setLayout(jPanel1Layout);
jSendArea.setPreferredSize(new java.awt.Dimension(334, 96));
jChatInput = new JTextArea();
jChatInput.setEditable(false);
jChatInput.setWrapStyleWord(true);
jChatInput.setLineWrap(true);
jChatInput.setPreferredSize(new java.awt.Dimension(324, 51));
jSendArea.add(jChatInput);
jSendText = new JButton();
jSendText.setText("Send");
jSendText.setEnabled(false);
jSendText.addActionListener(new SendListener());
jSendText.setPreferredSize(new java.awt.Dimension(84, 30));
jSendArea.add(jSendText);
jSendArea.setBorder(new LineBorder(Color.black, 2, false));
}
private void makeStreamsThreads(Socket s) {
try {
i = s.getInputStream();
scan = new Scanner(i);
o = s.getOutputStream();
print = new PrintWriter(o, true);
listener = new Thread(this);
listener.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}