POO Lab Lucrarea 6: Diferență între versiuni

De la WikiLabs
(Cerințe)
(Cerințe)
 
(Nu s-au afișat 4 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 19: Linia 19:
 
[[Fișier:chat_client_gui.png|thumb|Interfața grafică pentru client]]
 
[[Fișier:chat_client_gui.png|thumb|Interfața grafică pentru client]]
  
* Folosind Java Swing, creați o interfață grafică, ca cea din figură, care să implementeze funcționalitatea clientului. Numiți clasa <code style="color: green">seriaf.poo.client.gui.GuiClient</code>. Este interzisă utilizarea unui ”Gui Creator” precum cel din Netbeans.
+
* Folosind Java Swing, creați o interfață grafică, ca cea din figură, care să implementeze funcționalitatea clientului. Numiți clasa <code style="color: green">ro.upb.etti.poo.chat_application.client.gui.GuiClient</code>. Este interzisă utilizarea unui ”Gui Creator” precum cel din Netbeans.
 
* Constructorul clasei <code style="color: green">GuiClient</code> trebuie să ia ca argument un obiect de tip <code style="color: green">Socket</code> deja conectat și un nume inițial pentru expeditor (user), să creeze interfața grafică și să instanțieze un obiect de tip <code style="color: green">ClientPeer</code> a cărui referință se salvează într-un câmp.
 
* Constructorul clasei <code style="color: green">GuiClient</code> trebuie să ia ca argument un obiect de tip <code style="color: green">Socket</code> deja conectat și un nume inițial pentru expeditor (user), să creeze interfața grafică și să instanțieze un obiect de tip <code style="color: green">ClientPeer</code> a cărui referință se salvează într-un câmp.
* Clasa <code style="color: green">GuiClient</code> trebuie să conțină și o metodă <code style="color: green">void display()</code> care să pornească thread-ul <code style="color: green">ClientPeer</code> și să afișeze Frame-ul creat.
+
* Clasa <code style="color: green">GuiClient</code> trebuie să conțină și o metodă <code style="color: green">void display()</code> care să pornească thread-ul <code style="color: green">ClientPeer</code> și să afișeze Frame-ul creat (neapărat în această ordine).
 
* Metoda <code style="color: green">main</code> din <code style="color: green">GuiClient</code> trebuie să instanțieze un obiect de tip <code style="color: green">Socket</code> și un obiect de tip <code style="color: green">GuiClient</code>, apoi să apeleze metoda <code style="color: green">display</code>. Numele inițial, hostname-ul și port-ul la care se conectează clientul sunt date ca argument la execuția programului (vezi https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html).
 
* Metoda <code style="color: green">main</code> din <code style="color: green">GuiClient</code> trebuie să instanțieze un obiect de tip <code style="color: green">Socket</code> și un obiect de tip <code style="color: green">GuiClient</code>, apoi să apeleze metoda <code style="color: green">display</code>. Numele inițial, hostname-ul și port-ul la care se conectează clientul sunt date ca argument la execuția programului (vezi https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html).
 
* Componentele grafice (butoane, textFields, etc.) trebuie să fie câmpuri în clasa <code style="color: green">GuiClient</code> și să aibă următoarele nume:
 
* Componentele grafice (butoane, textFields, etc.) trebuie să fie câmpuri în clasa <code style="color: green">GuiClient</code> și să aibă următoarele nume:
Linia 27: Linia 27:
 
** câmpul de editare pentru numele expeditorului - <code style="color: green">mSenderTextField</code>
 
** câmpul de editare pentru numele expeditorului - <code style="color: green">mSenderTextField</code>
 
** butonul de schimbare a numelui - <code style="color: green">mChangeSenderButton</code>
 
** butonul de schimbare a numelui - <code style="color: green">mChangeSenderButton</code>
** fereastra de afișare a mesajelor - <code style="color: green">mMessageDisplayTextArea</code>
+
** zona de afișare a mesajelor - <code style="color: green">mMessageDisplayTextArea</code>
 
** câmpul de editare pentru mesaj - <code style="color: green">mMessageTextField</code>
 
** câmpul de editare pentru mesaj - <code style="color: green">mMessageTextField</code>
 
** butonul pentru trimiterea mesajului - <code style="color: green">mSendMessageButton</code>
 
** butonul pentru trimiterea mesajului - <code style="color: green">mSendMessageButton</code>
Linia 34: Linia 34:
 
* La apăsarea butonului X al ferestrei, aplicația trebuie să se oprească.
 
* La apăsarea butonului X al ferestrei, aplicația trebuie să se oprească.
 
* Fereastra principală trebuie să nu poată fi redimensionată (trebuie dimensionată programatic astfel încât componentele să fie ușor de observat și utilizat).
 
* Fereastra principală trebuie să nu poată fi redimensionată (trebuie dimensionată programatic astfel încât componentele să fie ușor de observat și utilizat).
* Comportamentul aplicației trebuie să fie identic cu cel al lui TextClient (să se poată folosi comenzile /q si /w).
+
* Comportamentul aplicației trebuie să fie identic cu cel al lui <code style="color: green">TextClient</code> (să se poată folosi comenzile /q si /w).
* Adăugați clasei <code style="color: green">ClientPeer</code> o metodă setter pentru câmpul <code style="color: green">mUsername</code> care se va apela când se dă click pe butonul de schimbare a numelui: <code style="color: green">void setUsername(String)</code>
+
* Adăugați clasei <code style="color: green">ClientPeer</code> o metodă setter pentru câmpul <code style="color: green">mSender</code> care se va apela când se dă click pe butonul de schimbare a numelui: <code style="color: green">void setUsername(String)</code>
 
* Adăugați clasei <code style="color: green">ClientPeer</code> o metodă <code style="color: green">void setOutputPane(JTextArea)</code>. Această metodă trebuie apelată în constructorul clasei <code style="color: green">GuiClient</code> cu zona în care se afișează mesajele ca argument. <code style="color: green">ClientPeer</code> va scrie mesajele primite în acest TextField în loc să le afișeze în consolă.
 
* Adăugați clasei <code style="color: green">ClientPeer</code> o metodă <code style="color: green">void setOutputPane(JTextArea)</code>. Această metodă trebuie apelată în constructorul clasei <code style="color: green">GuiClient</code> cu zona în care se afișează mesajele ca argument. <code style="color: green">ClientPeer</code> va scrie mesajele primite în acest TextField în loc să le afișeze în consolă.

Versiunea curentă din 13 decembrie 2017 11:24

Noțiuni și cunoștințe necesare

Cerințe

Interfața grafică pentru client
  • Folosind Java Swing, creați o interfață grafică, ca cea din figură, care să implementeze funcționalitatea clientului. Numiți clasa ro.upb.etti.poo.chat_application.client.gui.GuiClient. Este interzisă utilizarea unui ”Gui Creator” precum cel din Netbeans.
  • Constructorul clasei GuiClient trebuie să ia ca argument un obiect de tip Socket deja conectat și un nume inițial pentru expeditor (user), să creeze interfața grafică și să instanțieze un obiect de tip ClientPeer a cărui referință se salvează într-un câmp.
  • Clasa GuiClient trebuie să conțină și o metodă void display() care să pornească thread-ul ClientPeer și să afișeze Frame-ul creat (neapărat în această ordine).
  • Metoda main din GuiClient trebuie să instanțieze un obiect de tip Socket și un obiect de tip GuiClient, apoi să apeleze metoda display. Numele inițial, hostname-ul și port-ul la care se conectează clientul sunt date ca argument la execuția programului (vezi https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html).
  • Componentele grafice (butoane, textFields, etc.) trebuie să fie câmpuri în clasa GuiClient și să aibă următoarele nume:
    • eticheta unde scrie "Name:" - mSenderNameLabel
    • câmpul de editare pentru numele expeditorului - mSenderTextField
    • butonul de schimbare a numelui - mChangeSenderButton
    • zona de afișare a mesajelor - mMessageDisplayTextArea
    • câmpul de editare pentru mesaj - mMessageTextField
    • butonul pentru trimiterea mesajului - mSendMessageButton
    • scroll pane-ul în care este plasată zona de afișare a mesajelor - mMessageAreaScrollPane
  • Fereastra de afișare a mesajelor trebuie să fie read-only.
  • La apăsarea butonului X al ferestrei, aplicația trebuie să se oprească.
  • Fereastra principală trebuie să nu poată fi redimensionată (trebuie dimensionată programatic astfel încât componentele să fie ușor de observat și utilizat).
  • Comportamentul aplicației trebuie să fie identic cu cel al lui TextClient (să se poată folosi comenzile /q si /w).
  • Adăugați clasei ClientPeer o metodă setter pentru câmpul mSender care se va apela când se dă click pe butonul de schimbare a numelui: void setUsername(String)
  • Adăugați clasei ClientPeer o metodă void setOutputPane(JTextArea). Această metodă trebuie apelată în constructorul clasei GuiClient cu zona în care se afișează mesajele ca argument. ClientPeer va scrie mesajele primite în acest TextField în loc să le afișeze în consolă.