TP #4 b. ClientBourse.java Classe principale du client graphique et fonction main. http://www.centraliup.fr.st



Similar documents
TP1 : Correction. Rappels : Stream, Thread et Socket TCP

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

TP N 10 : Gestion des fichiers Langage JAVA

Advanced Network Programming Lab using Java. Angelos Stavrou

TP JSP : déployer chaque TP sous forme d'archive war

Creating a Simple, Multithreaded Chat System with Java

ExempleRMI.java. // Fichier de defintion des droits et proprietes // System.setProperty("java.security.policy","../server.java.

POB-JAVA Documentation

Brazil + JDBC Juin 2001, douin@cnam.fr

CSS 543 Program 3: Online Tic-Tac-Toe Game Professor: Munehiro Fukuda Due date: see the syllabus

Licence Informatique Année Exceptions

TP : Système de messagerie - Fichiers properties - PrepareStatement

Langages Orientés Objet Java

Swing. A Quick Tutorial on Programming Swing Applications

JAVA Program For Processing SMS Messages

Lesson: All About Sockets

Remote Method Invocation

// Correntista. //Conta Corrente. package Banco; public class Correntista { String nome, sobrenome; int cpf;

Network Traffic based Application Identification Demonstrator (Net AI) GUI. Kenny Nguyen

Annexe - OAuth Introduction. Xavier de Rochefort xderoche@labri.fr - labri.fr/~xderoche 15 mai 2014

Note concernant votre accord de souscription au service «Trusted Certificate Service» (TCS)

Les fragments. Programmation Mobile Android Master CCI. Une application avec deux fragments. Premier layout : le formulaire

Technical Service Bulletin

Dev Articles 05/25/07 11:07:33

Tool & Asset Manager 2.0. User's guide 2015

The Abstract Windowing Toolkit. Java Foundation Classes. Swing. In April 1997, JavaSoft announced the Java Foundation Classes (JFC).

CS 335 Lecture 06 Java Programming GUI and Swing

Informatik II. // ActionListener hinzufügen btnconvert.addactionlistener(this); super.setdefaultcloseoperation(jframe.

Liste d'adresses URL

Homework/Program #5 Solutions

5.17 GUI. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Personnalisez votre intérieur avec les revêtements imprimés ALYOS design

public class demo1swing extends JFrame implements ActionListener{

Introduction. GEAL Bibliothèque Java pour écrire des algorithmes évolutionnaires. Objectifs. Simplicité Evolution et coévolution Parallélisme

Java GUI Programming. Building the GUI for the Microsoft Windows Calculator Lecture 2. Des Traynor 2005

Android and Cloud Computing

Aucune validation n a été faite sur l exemple.

INTRODUCTION TO COMPUTER PROGRAMMING. Richard Pierse. Class 7: Object-Oriented Programming. Introduction

Building DHCP Automatically Eric Seigne

Calcul parallèle avec R

TP : Configuration de routeurs CISCO

Network Communication

Using A Frame for Output

private byte[] encryptcommand = {(byte)0xa0, (byte)0xc1, (byte)0x00, (byte)0x00, (byte) 0x00};

FILE I/O IN JAVA. Prof. Chris Jermaine Prof. Scott Rixner

CSS : petits compléments

Power Distribution System. Additional Information on page 2 See Page 2 Page 6. Eaton. See Page 2. Additional Information on page 2

Division of Informatics, University of Edinburgh

GUIs with Swing. Principles of Software Construction: Objects, Design, and Concurrency. Jonathan Aldrich and Charlie Garrod Fall 2012

Stockage distribué sous Linux

Introduction to Java. Module 12: Networking (Java Sockets) Prepared by Costantinos Costa for EPL 233. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Voici votre rapport sur votre service OpenERP en ligne.

How To Download Openoffice 40 Manual And User Guide

Thursday, February 7, DOM via PHP

openoffice 32 manual : The User's Guide

Modifier le texte d'un élément d'un feuillet, en le spécifiant par son numéro d'index:

CS506 Web Design and Development Solved Online Quiz No. 01

public class Craps extends JFrame implements ActionListener { final int WON = 0,LOST =1, CONTINUE = 2;

The Java I/O System. Binary I/O streams (ascii, 8 bits) The decorator design pattern Character I/O streams (Unicode, 16 bits)

Programmation RMI Sécurisée


Configuration Guide. SafeNet Authentication Service. SAS Agent for AD FS

JIDE Action Framework Developer Guide

D06 PROGRAMMING with JAVA

Bluetooth Low Energy

Générer des graphiques 3D - Cours Université de Sfax

Repris de : Version Debian (de base)

CASifier une application

Introduction au BIM. ESEB Seyssinet-Pariset Economie de la construction contact@eseb.fr

UI software architectures & Modeling interaction

file://c:\dokumente und Einstellungen\Marco Favorito\Desktop\ScanCmds.html

site et appel d'offres

Programming with Java GUI components

RAPPORT FINANCIER ANNUEL PORTANT SUR LES COMPTES 2014

Graphical User Interfaces

Chapter 20 Streams and Binary Input/Output. Big Java Early Objects by Cay Horstmann Copyright 2014 by John Wiley & Sons. All rights reserved.

Fondamenti di Java. Introduzione alla costruzione di GUI (graphic user interface)

State of Maryland Health Insurance Exchange

Applying this template to your existing presentation

Karsten Lentzsch JGoodies SWING WITH STYLE

Different types of resources are specified by their scheme, each different pattern is implemented by a specific protocol:

Using NetBeans IDE to Build Quick UI s Ray Hylock, GISo Tutorial 3/8/2011

Troncatures dans les modèles linéaires simples et à effets mixtes sous R

BILL C-665 PROJET DE LOI C-665 C-665 C-665 HOUSE OF COMMONS OF CANADA CHAMBRE DES COMMUNES DU CANADA

openoffice impress 3 guide

Introduction ToIP/Asterisk Quelques applications Trixbox/FOP Autres distributions Conclusion. Asterisk et la ToIP. Projet tuteuré

USER Guide. ECONOMIX Solution. New Module - Purchases online. Purchases Online. User Guide ECONOMIX SYSTÈME INC. Tous droits réservés.

Relevé des frais annuels de l entente de licence destinée à l enseignement primaire et secondaire MAI 2016

JiST Graphical User Interface Event Viewer. Mark Fong

How To Set Up Vsftpd On A Pc Or Mac Or Mac (For Mac) On A Mac Or Ipa (For Pc Or Ipad) On Pc Or Pc Or Pb (For Ipa) On An Ipa Or Mac

INPUT AND OUTPUT STREAMS

Enterprise Risk Management & Board members. GUBERNA Alumni Event June 19 th 2014 Prepared by Gaëtan LEFEVRE

Archived Content. Contenu archivé

Java Network Programming. The java.net package contains the Socket class. This class speaks TCP (connection-oriented protocol).

Archived Content. Contenu archivé

Service Integration BUS

REQUEST FORM FORMULAIRE DE REQUÊTE

120, 200 x. r1 = 25. virtua void translate (int dx, dy) = 0; virtual void dessiner(graphics &g) = 0;

An Android-based Instant Message Application

Product / Produit Description Duration /Days Total / Total

Transcription:

http://www.centraliup.fr.st Conception et Internet TP #4 b ClientBourse.java Classe principale du client graphique et fonction main import javax.swing.table.*; import javax.swing.event.*; import javax.swing.border.*; class ClientBourse extends JFrame implements ActionListener private static final int COMMAND_NOTHING=0; private static final int COMMAND_ADDUSER=1; private static final int COMMAND_LOGIN=2; private static final int COMMAND_LIST=3; private static final int COMMAND_LISTMARKET=4; private static final int COMMAND_BUYSELL=5; private class ClientGestionSouris extends MouseAdapter if(e.getsource()==bacheter) actionacheter(); if(e.getsource()==bvendre) actionvendre(); if(e.getsource()==bconnect) ; private JTable tbourse, tclient; private DefaultTableModel mbourse, mclient; private JButton bacheter, bvendre, bconnect; private JTextArea tlog; private JScrollPane dbourse, dclient, dlog; private Vector entetes; private ClientGestionSouris gsouris; // Menus : private JMenuBar menubar; private JMenu menufichier,menutransaction; private JMenuItem itemconnexion,itemdeconnexion,itemquitter; private JMenuItem itemacheter,itemvendre; // Client associe : ClientInterne client; // Membres donnees : private final String titreapplication= "Client Boursier"; private boolean connecte; private String nomlogin; private int ecoute; public ClientBourse() // Initie la fenetre : super(); settitle(titreapplication); nomlogin=new String(""); // Cree les boutons et les place dans le cadre : bacheter=new JButton("Acheter >>"); bvendre=new JButton("<< Vendre"); bacheter.setenabled(false); bvendre.setenabled(false); bconnect=new JButton("Connexion"); cadre.setlayout(new GridLayout(3, 1, 20, 20)); cadre.add(bacheter); bacheter.setmaximumsize(new Dimension(100, 40)); bvendre.setmaximumsize(new Dimension(100, 40)); bconnect.setmaximumsize(new Dimension(100, 40)); cadre.add(bvendre); cadre.add(bconnect); cadre.setpreferredsize(new Dimension(100, 200)); // Cree les tables : entetes=new Vector(); entetes.addelement("action"); entetes.addelement("quantité"); mbourse=new DefaultTableModel(entetes, 0); mclient=new DefaultTableModel(entetes, 0); tbourse=new JTable(mBourse); tclient=new JTable(mClient); dbourse=new JScrollPane(tBourse); dclient=new JScrollPane(tClient); Border lborder=borderfactory.createetchedborder(etchedborder.lowered); TitledBorder tborder1=borderfactory.createtitledborder(lborder, "Bourse"); tborder1.settitlejustification(titledborder.center); TitledBorder tborder2=borderfactory.createtitledborder(lborder, "Client"); tborder2.settitlejustification(titledborder.center); dbourse.setborder(tborder1); dclient.setborder(tborder2); tbourse.setshowverticallines(false); tclient.setshowverticallines(false); dbourse.setpreferredsize(new Dimension(200, 200)); dclient.setpreferredsize(new Dimension(200, 200)); // Cree l'afficheur de log : tlog=new JTextArea(); tlog.seteditable(false); tlog.setlinewrap(true); dlog=new JScrollPane(tLog); dlog.setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always); dlog.setborder(borderfactory.createloweredbevelborder()); dlog.setpreferredsize(new Dimension(300, 50)); // Place tout ca dans le layout : layout.constrain(getcontentpane(), dbourse, 0, 0, 1, 1, 5, 0.5); layout.constrain(getcontentpane(), cadre, 1, 0, 1, 1, 10, 0); layout.constrain(getcontentpane(), dclient, 2, 0, 1, 1, 5, 0.5); layout.constrain(getcontentpane(), dlog, 0, 1, 3, 1, 5, 0.5); // Menus : menubar=new JMenuBar(); menufichier=new JMenu("Fichier"); menutransaction=new JMenu("Transaction"); itemconnexion=new JMenuItem("Connexion..."); itemdeconnexion=new JMenuItem("Déconnexion"); itemdeconnexion.setenabled(false); itemconnexion.addactionlistener(this); itemdeconnexion.addactionlistener(this); itemquitter=new JMenuItem("Quitter"); itemquitter.addactionlistener(this); itemacheter=new JMenuItem("Acheter..."); itemacheter.addactionlistener(this); itemvendre=new JMenuItem("Vendre..."); itemvendre.addactionlistener(this); menufichier.add(itemconnexion); menufichier.add(itemdeconnexion); menufichier.add(itemquitter); menutransaction.add(itemacheter); menutransaction.add(itemvendre); menutransaction.setenabled(false); menubar.add(menufichier); menubar.add(menutransaction); setjmenubar(menubar); // Ajoute les listeners au bouton : gsouris=new ClientGestionSouris(); bacheter.addmouselistener(gsouris); bvendre.addmouselistener(gsouris); bconnect.addmouselistener(gsouris); // Log : ecoute=0; addlog("client Boursier prêt!"); addlog("cliquez sur le bouton 'Connexion' pour entrer votre login."); // Gestion des evenements du type clic sur un item de menu : public void actionperformed(actionevent e) // Distribution de chaque clic sur item au gestionnaire competent : if(e.getsource()==itemconnexion) if(e.getsource()==itemdeconnexion) if(e.getsource()==itemacheter) actionacheter(); if(e.getsource()==itemvendre) actionvendre(); if(e.getsource()==itemquitter) System.exit(0); public void actionconnection() if(connecte==true) // Deconnexion : client.sendlogout(); client. // Affiche la fenetre de connexion : LogScreen connection=new LogScreen(this); if(connection.estvalide()) nomlogin=connection.getnom(); String adresse=connection.getadresse(); int port=connection.getport(); // C'est parti! addlog("connexion a " + adresse + " sur le port " + port); client=new ClientInterne(this); client.connect(adresse, port); addlog("connexion etablie."); catch(clientinterne.unabletoconnectexception except) addlog("connexion impossible."); return; connecte=true; bconnect.settext("déconnexion"); Conception et Internet (Java) TP #4 (b) Page 1/5

// On se logge ecoute=command_login; client.sendlogin(nomlogin); bacheter.setenabled(true); bvendre.setenabled(true); menutransaction.setenabled(true); itemconnexion.setenabled(false); itemdeconnexion.setenabled(true); settitle(titreapplication+" - " + nomlogin); public void connectionreceive(string chaine) switch(ecoute) case COMMAND_NOTHING: case COMMAND_LISTMARKET: if(chaine.equals("")) ecoute=command_list; client.sendlist(); StringTokenizer st0=new StringTokenizer(chaine,"\n"); String ligne=new String(""); if(st0.hasmoretokens()) ligne=st0.nexttoken(); StringTokenizer st=new StringTokenizer(chaine," "); Vector data=new Vector(); mbourse.addrow(data); mbourse.firetabledatachanged(); case COMMAND_LIST: if(chaine.equals("")) StringTokenizer st0=new StringTokenizer(chaine,"\n"); String ligne=new String(""); if(st0.hasmoretokens()) ligne=st0.nexttoken(); StringTokenizer st=new StringTokenizer(chaine," "); Vector data=new Vector(); mclient.addrow(data); mclient.firetabledatachanged(); case COMMAND_BUYSELL: if(chaine.tolowercase().startswith("err")) addlog("attention : la transaction n'a pas ete validee" + " par le serveur."); ecoute=command_listmarket; client.sendlistmarket(); case COMMAND_ADDUSER: if(chaine.tolowercase().startswith("err")) addlog("vous etes deja connecte!"); client.sendlogout(); client. ecoute=command_login; client.sendlogin(nomlogin); case COMMAND_LOGIN: // Voit si on est accepte par le serveur : if(!chaine.tolowercase().startswith("ok")) ecoute=command_adduser; client.sendadduser(nomlogin); ecoute=command_listmarket; client.sendlistmarket(); // Vide les tables : public void connectionlost() addlog("deconnecte du serveur!"); public void connectionclose() nomlogin=new String(""); client=null; bconnect.settext("connexion"); bacheter.setenabled(false); bvendre.setenabled(false); menutransaction.setenabled(false); itemconnexion.setenabled(true); itemdeconnexion.setenabled(false); settitle(titreapplication); mbourse.firetabledatachanged(); mclient.firetabledatachanged(); public void actionacheter() int i=tbourse.getselectedrow(); if(i<0) addlog("sélectionnez une action à acheter dans la bourse."); return; String action=(string)mbourse.getvalueat(i, 0); int qte=integer.valueof((string)mbourse.getvalueat(i, 1)).intValue(); TransactionScreen transac=new TransactionScreen(this, action, qte, TransactionScreen.ACHETER); if(transac.estvalide()) ecoute=command_buysell; client.sendbuy(action, transac.getquantite()); public void actionvendre() int i=tclient.getselectedrow(); if(i<0) addlog("sélectionnez une action à vendre dans votre portefeuille."); return; String action=(string)mclient.getvalueat(i, 0); int qte=integer.valueof((string)mclient.getvalueat(i, 1)).intValue(); TransactionScreen transac=new TransactionScreen(this, action, qte, TransactionScreen.VENDRE); if(transac.estvalide()) ecoute=command_buysell; client.sendsell(action, transac.getquantite()); // Ajoute une ligne de texte a l'ecran de log : public void addlog(string chaine) tlog.setcaretposition(tlog.gettext().length()); tlog.replaceselection(chaine+"\n"); tlog.select(tlog.gettext().length()-1, tlog.gettext().length()-1); public static void main(string args[]) // L'application essaie de prendre le Look And Feel du systeme courant : UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName() ); catch(exception e) // Cree la fenetre principale de l'application : JFrame fenetre = new ClientBourse(); // Lecture de la taille de l'écran : // Lorsque la fenetre sera fermee, l'application quittera : fenetre.setdefaultcloseoperation(jframe.exit_on_close); // Verification d'integrite des controles de la fenetre : fenetre. // Maintenant que la fenetre a sa taille finale, la centre sur l'ecran : fenetre.setlocation( (tailleecran.width-fenetre.getwidth())/2, (tailleecran.height-fenetre.getheight())/2 ); // Affiche la fenetre pour notre cher utilisateur : fenetre. ; Conception et Internet (Java) TP #4 (b) Page 2/5

TransactionScreen.java Fenêtre de réglage d une transaction import javax.swing.event.*; import java.beans.*; class TransactionScreen extends JDialog implements ActionListener, ChangeListener public static final int ACHETER=1; public static final int VENDRE=2; if(e.getsource()==bok) quantite=integer.valueof(tquantite.gettext()).intvalue(); // Controle des valeurs : if(quantite<=0) boiteerreur("quantite d'action invalide."); return; boiteerreur("quantite d'action invalide."); ; private JLabel atexte1, atexte2; private JTextField tquantite; private JButton bok, bcancel; private JSlider gliss; private ClientBourse cb; int quantite; public TransactionScreen(ClientBourse cb, String action, int qtemax, int mode) super(cb, true); settitle("transaction"); this.cb=cb; // Cree les boutons, les labels, et les textfields : atexte1=new JLabel(); if(mode==acheter) atexte1.settext("acheter"); atexte1.settext("vendre"); atexte2=new JLabel("actions de " + action + "."); tquantite=new JTextField(String.valueOf((int)qteMax/2)); tquantite.setminimumsize(new Dimension(40,10)); bok=new JButton("OK"); // Slider : gliss=new JSlider(); int mintick=qtemax/50; int maxtick=qtemax/10; if(maxtick<1) mintick=2; maxtick=10; gliss.setminortickspacing(mintick); gliss.setmajortickspacing(maxtick); gliss.setmaximum(qtemax); gliss.setminimum(0); gliss.setpaintticks(true); // Les place dans un cadre intermediaire : cadre.setlayout(intra); intra.constrain(cadre, atexte1, 0, 0, 1, 1, 1, 0.5); intra.constrain(cadre, tquantite, 1, 0, 1, 1, 1, 0.5); intra.constrain(cadre, atexte2, 2, 0, 1, 1, 1, 0.5); intra.constrain(cadre, gliss, 0, 1, 3, 1, 1, 0.5); // Place le tout dans le layout de la fenetre : layout.constrain(getcontentpane(), cadre, 0, 0, 2, 1, 10, 0.5); layout.constrain(getcontentpane(), bok, 0, 1, 1, 1, 10, 0.5); layout.constrain(getcontentpane(), bcancel, 1, 1, 1, 1, 10, 0.5); bok.addmouselistener(gsouris); // Interaction slider et textfield : tquantite.addactionlistener(this); gliss.addchangelistener(this); gliss.setvalue((int)qtemax/2); public void actionperformed(actionevent e) Integer value = Integer.valueOf(tQuantite.getText()); gliss.setvalue(value.intvalue()); public void statechanged(changeevent e) JSlider source = (JSlider)e.getSource(); int qte=(int)source.getvalue(); if(!source.getvalueisadjusting()) //tquantite.settext(new Integer(qte)); tquantite.settext(string.valueof(qte)); boolean estvalide() return valide; int getquantite() return quantite; LogScreen.java Ecran de connexion à un serveur class LogScreen extends JDialog public static final String FICHIER_SERVEURS="listeserveurs.cfg"; if(e.getsource()==bconnect) actionconnect(); if(e.getsource()==badd) actionadd(); if(e.getsource()==bsupp) actionsupp(); ; private JLabel aserveur, alogin; private JTextField tlogin; private DefaultListModel mliste; private JList tliste; private JPanel cserveur, clogin; private JButton bconnect, bcancel, badd, bsupp; private JScrollPane dliste; private ClientBourse client; String nom; String adresse; int port; Conception et Internet (Java) TP #4 (b) Page 3/5

public LogScreen(ClientBourse cb) super(cb, true); settitle("connexion"); client=cb; // Cree les boutons et les labels : aserveur=new JLabel("Serveur : "); alogin=new JLabel("Login :"); bconnect=new JButton("Connexion"); badd=new JButton("Ajouter"); bsupp=new JButton("Supprimer"); tlogin=new JTextField(); // Cree la liste : mliste=new DefaultListModel(); loadserveurs(); tliste=new JList(mListe); dliste=new JScrollPane(tListe); if(mliste.size()>0) tliste.setselectedindex(0); // Cree le cadre Login : clogin=new JPanel(); clogin.setlayout(new GridLayout(2, 1, 10, 10)); clogin.add(alogin); clogin.add(tlogin); // Cree le cadre Serveur : cserveur=new JPanel(); cserveur.setlayout(intra); intra.constrain(cserveur, aserveur, 0, 0, 2, 1, 5, 0.5); intra.constrain(cserveur, dliste, 0, 1, 1, 2, 5, 0.5); intra.constrain(cserveur, badd, 1, 1, 1, 1, 5, 0.5); intra.constrain(cserveur, bsupp, 1, 2, 1, 1, 5, 0.5); // Place tout ca dans le layout : layout.constrain(getcontentpane(), clogin, 0, 0, 2, 1, 10, 0.0); layout.constrain(getcontentpane(), cserveur, 0, 1, 2, 1, 10, 0.0); layout.constrain(getcontentpane(), bconnect, 0, 2, 1, 1, 20, 0.5); layout.constrain(getcontentpane(), bcancel, 1, 2, 1, 1, 20, 0.5); bconnect.addmouselistener(gsouris); badd.addmouselistener(gsouris); bsupp.addmouselistener(gsouris); public void loadserveurs() FileInputStream istream=new FileInputStream(FICHIER_SERVEURS); ObjectInputStream p=new ObjectInputStream(istream); // Recupere l'objet grace a la magie de la serialisation : mliste=(defaultlistmodel)p.readobject(); istream. catch(classnotfoundexception except) catch(filenotfoundexception except) public void saveserveurs() FileOutputStream ostream = new FileOutputStream(FICHIER_SERVEURS); ObjectOutputStream p=new ObjectOutputStream(ostream); ; // Grace a la magie de la serialisation, cette simple fonction enregistre // la totalite de l'objet dans le fichier specifie! p.writeobject(mliste); p.flush(); ostream. catch(filenotfoundexception except) public void actionadd() LogAddScreen nouveau=new LogAddScreen(this); if(nouveau.estvalide()) String nouvserveur=nouveau.getnomserveur() + " <" + nouveau.getadresse() + ":" + nouveau.getport() + ">"; mliste.addelement(nouvserveur); tliste.setselectedindex(mliste.size()-1); saveserveurs(); public void actionsupp() int i=tliste.getselectedindex(); if(i>=0) mliste.removeelementat(i); saveserveurs(); public void actionconnect() nom=tlogin.gettext(); String element=(string)mliste.getelementat(tliste.getselectedindex()); StringTokenizer st=new StringTokenizer(element, "<>"); if(st.hasmoretokens()) st.nexttoken(); if(st.hasmoretokens()) element=st.nexttoken(); StringTokenizer st2=new StringTokenizer(element, ":"); if(st2.hasmoretokens()) adresse=st2.nexttoken(); if(st2.hasmoretokens()) port=integer.valueof(st2.nexttoken()).intvalue(); // Controle : if(nom==null nom.equals("")) boiteerreur("entrez un login."); return; if(adresse==null adresse.equals("")) boiteerreur("adresse IP invalide."); return; if(port<=0) boiteerreur("numero de port invalide."); return; boiteerreur("serveur invalide"); boolean estvalide() return valide; String getnom() return nom; String getadresse() return adresse; int getport() return port; LogAddScreen.java Fenêtre d ajout d un serveur class LogAddScreen extends JDialog if(e.getsource()==bok) nomserveur=tnom.gettext(); adresse=tip.gettext(); port=integer.valueof(tport.gettext()).intvalue(); // Controle des valeurs : if(nomserveur==null nomserveur.equals("")) boiteerreur("entrez un nom pour le serveur."); return; if(adresse==null adresse.equals("")) boiteerreur("veuillez entrer une adresse IP."); return; if(port<=0) boiteerreur("numero de port invalide."); return; boiteerreur("numero de port invalide."); ; private JLabel anom, aip, aport; private JTextField tnom, tip, tport; private JButton bok, bcancel; String nomserveur; String adresse; int port; Conception et Internet (Java) TP #4 (b) Page 4/5

public LogAddScreen(LogScreen ls) super(ls, true); settitle("nouveau serveur"); // Cree les boutons, les labels, et les textfields : anom=new JLabel("Nom :"); aip=new JLabel("IP :"); aport=new JLabel("Port :"); tnom=new JTextField("Nouveau serveur"); tip=new JTextField("casimir"); tport=new JTextField(); bok=new JButton("OK"); // Les place dans un cadre intermediaire : cadre.setlayout(intra); intra.constrain(cadre, anom, 0, 0, 1, 1, 5, 0.5); intra.constrain(cadre, aip, 0, 1, 1, 1, 5, 0.5); intra.constrain(cadre, aport, 0, 2, 1, 1, 5, 0.5); intra.constrain(cadre, tnom, 1, 0, 1, 1, 5, 0.5); intra.constrain(cadre, tip, 1, 1, 1, 1, 5, 0.5); intra.constrain(cadre, tport, 1, 2, 1, 1, 5, 0.5); // Place le tout dans le layout de la fenetre : layout.constrain(getcontentpane(), cadre, 0, 0, 2, 1, 10, 0.5); layout.constrain(getcontentpane(), bok, 0, 1, 1, 1, 10, 0.5); layout.constrain(getcontentpane(), bcancel, 1, 1, 1, 1, 10, 0.5); bok.addmouselistener(gsouris); boolean estvalide() return valide; String getnomserveur() return nomserveur; String getadresse() return adresse; int getport() return port; ClientInterne.java Classe chargée de la communication asynchrone avec le serveur import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printwriter; import java.net.socket; import java.net.unknownhostexception; public class ClientInterne public class Recepteur extends Thread public void run() BufferedReader reader = null; reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); while(doitsortir==false) String line = reader.readline(); if (line!= null) cb.connectionreceive(line); cb.connectionlost(); catch (IOException e) cb.connectionlost(); ; public class ClientException extends Exception ; public class UnableToConnectException extends ClientException ; public class HostNotFoundException extends UnableToConnectException ; private int numport; private String ip; private boolean connecte; private PrintWriter writer; private BufferedReader reader; private ClientBourse cb; private Recepteur recept; private Socket socket; private boolean doitsortir; public ClientInterne(ClientBourse cb) this.cb=cb; ip=null; numport=0; doitsortir=false; writer=null; reader=null; socket=null; public void connect(string ip, int numport) throws UnableToConnectException if(connecte==true) throw new UnableToConnectException(); this.ip=ip; this.numport=numport; socket=new Socket(ip, numport); connecte=true; doitsortir=false; recept=new Recepteur(); recept.start(); writer=new PrintWriter(socket.getOutputStream(),true); reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); catch (UnknownHostException e) throw new HostNotFoundException(); catch (IOException e) throw new UnableToConnectException(); public boolean send(string chaine) cb. writer.println(chaine); writer.flush(); return true; ; public void sendlogin(string nom) if(connecte) send("login " + nom); public void sendadduser(string nom) if(connecte) send("add user " + nom); public void sendlist() if(connecte) send("list"); public void sendlistmarket() if(connecte) send("list market"); public void sendbuy(string action, int qte) if(connecte) send("buy "+action+" "+qte); public void sendsell(string action, int qte) if(connecte) send("sell "+action+" "+qte); public void sendlogout() if(connecte) send("logout"); public void close() if(connecte) doitsortir=true; socket. Conception et Internet (Java) TP #4 (b) Page 5/5