POO Lab Lucrarea 6
De la WikiLabs
Noțiuni și cunoștințe necesare
- Paradigma Obiect-Orientare; Clase și obiecte
- Noțiuni despre Java
- Realizarea și execuția unui program Java
- Sintaxa limbajului Java; Structura lexicală a unui program
- Convenții de programare
- Noțiuni avansate de programare obiect-orientată
- Java Application Programming Interface (API)
- Stream-uri de Input/Output
- Tratarea excepțiilor
- Serializarea obiectelor
- Socket-uri de rețea
- Programare concurentă - fire de execuție (Threads)
- Graphical User Interface (GUI) - Java Swing și JavaFX
Cerințe
- Folosind Java Swing, creați o interfață grafică, ca cea din figură, care să implementeze funcționalitatea clientului. Numiți clasa
seriaf.poo.client.gui.GuiClient
. Este interzisă utilizarea unui ”Gui Creator” precum cel din Netbeans. - Constructorul clasei
GuiClient
trebuie să ia ca argument un obiect de tipSocket
deja conectat și un nume inițial pentru expeditor (user) și să instanțieze un obiect de tipClientPeer
a cărui referință se salvează într-un câmp. - Metoda
main
dinGuiClient
trebuie să instanțieze un obiect de tipSocket
și un obiect de tipGuiClient
. - 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:- câmpul de editare pentru numele expeditorului -
mSenderTextField
- butonul de schimbare a numelui -
mChangeSenderButton
- fereastra 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
- câmpul de editare pentru numele expeditorului -
- 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 cea a lui TextClient (să se poată folosi comenzile /q si /w).
- Adăugați clasei ClientPeer o metodă setter pentru câmpul
mUsername
care se va apela când se dă click pe butonul de schimbare a numelui.