Newer
Older
nonet / src / ch / epfl / lca / sc250 / gui / CnFrameP2P.java
@Andreas Jaggi Andreas Jaggi on 4 May 2006 5 KB Changed directory structure.
package ch.epfl.lca.sc250.gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * @author Christophe Trefois
 * 
 */
public class CnFrameP2P extends CnFrame implements ActionListener {

	/**
	 * Generated serialID by Eclipse for Serializble Objects
	 */
	private static final long serialVersionUID = -3251522255074162116L;

	/**
	 * The TextArea used to display the messages
	 */
	private JTextArea textArea;

	/**
	 * TextField of the IP
	 */
	private JTextField ipAdressTextField;

	/**
	 * TextField of the Amount of Money
	 */
	private JTextField amountMoneyTextField;

	/**
	 * TextField of the position of the letter
	 */
	private JTextField letterPosition;

	/**
	 * Button used to send the request
	 */
	private JButton sendMessage;

	/**
	 * Instance of the main Program which is of type ITCPSender
	 */
	private ITCPSender tcpSender = null;

	/**
	 * Constructs a CnFrameP2P Instance with title windowTitle
	 * 
	 * @param windowTitle
	 */
	public CnFrameP2P(String windowTitle) {
		super(windowTitle);

		setSize(600, 300);

		JPanel centerPanel = new JPanel();

		textArea = new JTextArea();
		textArea.setEditable(false);

		JScrollPane scrollPane = new JScrollPane(textArea);

		centerPanel.setLayout(new GridLayout(1, 1));
		centerPanel.add(scrollPane);

		// put the centerPanel to the Center
		getContentPane().add(centerPanel, BorderLayout.CENTER);

		JPanel topPanel = new JPanel();
		topPanel.setLayout(new FlowLayout());

		topPanel.add(new JLabel("IP Address: "));
		ipAdressTextField = new JTextField();
		topPanel.add(ipAdressTextField);
		ipAdressTextField.setPreferredSize(new java.awt.Dimension(78, 20));

		topPanel.add(new JLabel("Money: "));
		amountMoneyTextField = new JTextField();
		topPanel.add(amountMoneyTextField);
		amountMoneyTextField.setPreferredSize(new java.awt.Dimension(49, 20));

		topPanel.add(new JLabel("Position: "));
		letterPosition = new JTextField();
		topPanel.add(letterPosition);
		letterPosition.setPreferredSize(new java.awt.Dimension(56, 20));

		sendMessage = new JButton();
		topPanel.add(sendMessage);
		sendMessage.setText("Send Request");
		sendMessage.setActionCommand("Send");
		sendMessage.addActionListener(this);

		getContentPane().add(topPanel, BorderLayout.NORTH);

		// Make this frame visible
		setVisible(true);
	}

	/**
	 * Append Text to the textArea
	 * 
	 * @param textToAppend
	 */
	public void appendText(String textToAppend) {
		textArea.append(super.getCurrentTime() + " : " + textToAppend);
		textArea.setCaretPosition(textArea.getText().length());
	}

	/**
	 * Clear the TextArea.
	 */
	public void clearTextArea() {
		textArea.replaceRange("", 0, textArea.getText().length());
	}

	/**
	 * 
	 */
	public void actionPerformed(ActionEvent arg0) {
		String command = arg0.getActionCommand();
		if (command.equalsIgnoreCase("Send")) {
			if (tcpSender == null)
				return;
			appendText("IP: " + ipAdressTextField.getText() + " - Buy For: "
					+ amountMoneyTextField.getText() + " - Position: "
					+ letterPosition.getText() + "\n");
			ipAdressTextField.setEnabled(false);
			amountMoneyTextField.setEnabled(false);
			letterPosition.setEnabled(false);
			sendMessage.setText("Waiting ...");
			sendMessage.removeActionListener(this);
			sendMessage.setEnabled(false);
			tcpSender.sendMessage(ipAdressTextField.getText(),
					amountMoneyTextField.getText(), letterPosition.getText());
		}
	}

	/**
	 * This method is called when an Answer is received from the other Player.
	 * <br>
	 * It then is displayed in the GUI, and the GUI is reset.
	 * 
	 * @param communication
	 */
	public void receivedMessage(String communication) {
		appendText(communication + "\n");
		ipAdressTextField.setEnabled(true);
		amountMoneyTextField.setEnabled(true);
		letterPosition.setEnabled(true);
		sendMessage.setText("Send Request");
		sendMessage.addActionListener(this);
		sendMessage.setEnabled(true);
		ipAdressTextField.setText("");
		amountMoneyTextField.setText("");
		letterPosition.setText("");
		appendText("----- Communication Completed --------\n");
	}

	/**
	 * Used to work with the Interface
	 * 
	 * @param tcpSender
	 */
	public void setTcpSender(ITCPSender tcpSender) {
		this.tcpSender = tcpSender;
	}

	/**
	 * When an offer is received, display a Confirm Dialog where the user can
	 * choose Yes or No
	 * 
	 * @param IP
	 *            The IP we got the offer from
	 * @param amount
	 *            The amount the other player gives us for a letter
	 * @param position
	 *            The position of the letter he wants to buy
	 * @return True or False
	 */
	public boolean getOfferResult(String IP, String amount, String position) {
		boolean chosenValue = false;
		String msgToDisplay = "Buyer from IP: " + IP
				+ "\nWants to buy Letter at Position " + position + " for "
				+ amount + "$";
		int returnValue = JOptionPane.showConfirmDialog(this, msgToDisplay,
				"You got an Offer !", JOptionPane.YES_NO_OPTION);
		if (returnValue == JOptionPane.OK_OPTION) {
			chosenValue = true;
		} else {
			chosenValue = false;
		}
		return chosenValue;
	}
}