Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pl.umk.mat.grzegorz72;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.Socket;
- import java.util.ArrayList;
- import javax.swing.*;
- public class Klient extends JFrame {
- private JTextArea tablicaCzata;
- private JTextField komunikat;
- private JTextField uzytkownikTx;
- /* nazwa użytkownika, adres*/
- String uzytkownik;
- String adres = "localhost";
- /* lista użytkowników czata */
- ArrayList<String> listaUzytkownikow = new ArrayList();
- /* nr portu, na którym działą czat */
- int port = 9090;
- /* wskaźnik, czy klient jest połączny z czatem */
- Boolean czyPolaczony = false;
- /* dniazdo, mechanizmy czytania i pisania */
- Socket gniazdo;
- BufferedReader czytaj;
- PrintWriter pisz;
- public void sluchaj() {
- Thread Pisanie = new Thread(new Pisanie());
- Pisanie.start();
- }
- /* dodawanie użytkownika do listy */
- public void dodajUzytkownika(String dane) {
- listaUzytkownikow.add(dane);
- }
- /* usuwanie użytkownika z listy */
- public void usunUzytkownika(String dane) {
- tablicaCzata.append(dane + " wyszedł z czata. \n");
- }
- public void writeUsers() { //nazwa moze ulec zmianie
- String[] tymczasowaLista = new String[listaUzytkownikow.size()];
- listaUzytkownikow.toArray(tymczasowaLista);
- for (String token : tymczasowaLista) {
- //listaUzytkownikow.append(token + "\n");
- }
- }
- /* wysyłanie informacji o rozłączeniu użytkownika z czatem */
- public void wyslijRozlacz() {
- String pozegnanie = (uzytkownik + ": rozłączył się");
- try {
- pisz.println(pozegnanie);
- pisz.flush();
- } catch (Exception e) {
- tablicaCzata.append("Nie udało się wysłać informacji o rozłączeniu \n");
- }
- }
- /* rzeczywiste rozłączenie się użytkownika */
- public void rozlacz() {
- try {
- tablicaCzata.append("Rozłączono.\n");
- gniazdo.close();
- } catch (Exception e) {
- tablicaCzata.append("Nie udało się rozłączyć.\n");
- }
- czyPolaczony = false;
- uzytkownikTx.setEditable(true);
- }
- /* konstruktor klasy */
- public Klient() {
- zbudujOkno();
- }
- /* w zależności od tego, jakie polecenie zostanie przekazane, będą wykonywane
- różne operacje */
- public class Pisanie implements Runnable {
- @Override
- public void run() {
- String[] dane;
- String strumien;
- String gotowe = "Gotowe";
- String polaczono = "Połączono";
- String rozlaczono = "Rozłączono";
- String czat = "Czat";
- try {
- while ((strumien = czytaj.readLine()) != null) {
- dane = strumien.split(":");
- if (dane[2].equals(czat)) {
- tablicaCzata.append(dane[0] + ":" + dane[1] + "\n");
- tablicaCzata.setCaretPosition(tablicaCzata.getDocument().getLength());
- }
- else if (dane[2].equals(polaczono)) {
- tablicaCzata.removeAll();
- dodajUzytkownika(dane[0]);
- }
- else if (dane[2].equals(rozlaczono)) {
- usunUzytkownika(dane[0]);
- }
- else if (dane[2].equals(gotowe)) {
- writeUsers();
- listaUzytkownikow.clear();
- }
- }
- } catch (Exception e) { }
- }
- }
- /* metoda budująca okno czata */
- private void zbudujOkno() {
- /* deklarowanie elementów okna */
- JLabel adresLb = new JLabel();
- JTextField adresTx = new JTextField();
- JLabel portLb = new JLabel();
- JTextField portTx = new JTextField();
- JLabel uzytkownikLb = new JLabel();
- uzytkownikTx = new JTextField();
- /* pola okna */
- JButton polaczPrz = new JButton();
- JButton rozlaczPrz = new JButton();
- JScrollPane panelPrzewijany = new JScrollPane();
- tablicaCzata = new JTextArea();
- komunikat = new JTextField();
- JButton wyslijPrz = new JButton();
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setTitle("Czat - klient");
- setName("klient");
- setResizable(false);
- /* zadeklarowanie zdarzeń związanych z kliknięciem określonych obiektów */
- adresLb.setText("Adres:");
- adresTx.setText("localhost");
- adresTx.addActionListener(e -> {
- //tu ma byc definiowana akcja dla tego pola
- });
- portLb.setText("Nr portu:");
- portTx.setText("9090");
- portTx.addActionListener(this::portAkcja);
- uzytkownikLb.setText("Użytkownik:");
- uzytkownikTx.addActionListener(this::uzytkownikAkcja);
- polaczPrz.setText("Połącz");
- polaczPrz.addActionListener(this::polaczAkcja);
- rozlaczPrz.setText("Rozłącz");
- rozlaczPrz.addActionListener(this::rozlaczAkcja);
- /*rozmiar pola podglądu rozmów na czacie */
- tablicaCzata.setColumns(25);
- tablicaCzata.setRows(8);
- panelPrzewijany.setViewportView(tablicaCzata);
- wyslijPrz.setText("Wyślij");
- wyslijPrz.addActionListener(this::wyslijAkcja);
- /* ustawienie elementów okna */
- GroupLayout layout = new GroupLayout((getContentPane()));
- getContentPane().setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(komunikat, javax.swing.GroupLayout.PREFERRED_SIZE, 352, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(wyslijPrz, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
- .addComponent(panelPrzewijany)
- .addGroup(layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
- .addComponent(uzytkownikLb, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
- .addComponent(adresLb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(adresTx, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
- .addComponent(uzytkownikTx))
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(portLb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(portTx, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(polaczPrz)
- .addGap(2, 2, 2)
- .addComponent(rozlaczPrz)
- .addGap(0, 0, Short.MAX_VALUE))
- )))
- .addContainerGap())
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGap(201, 201, 201))
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(adresLb)
- .addComponent(adresTx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(portLb)
- .addComponent(portTx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- )
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(uzytkownikTx)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(uzytkownikLb)
- .addComponent(polaczPrz)
- .addComponent(rozlaczPrz)))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(panelPrzewijany, javax.swing.GroupLayout.PREFERRED_SIZE, 310, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(komunikat)
- .addComponent(wyslijPrz, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- )
- );
- pack();
- }
- /* określenie akcji */
- private void adresAkcja(ActionEvent evt) {
- }
- private void portAkcja(ActionEvent evt) {
- }
- private void uzytkownikAkcja(ActionEvent evt) {
- }
- private void polaczAkcja(ActionEvent evt) {
- if (!czyPolaczony) {
- uzytkownik = uzytkownikTx.getText();
- uzytkownikTx.setEditable(false);
- try {
- gniazdo = new Socket(adres, port);
- InputStreamReader czytajStrumien = new InputStreamReader(gniazdo.getInputStream());
- czytaj = new BufferedReader(czytajStrumien);
- pisz = new PrintWriter(gniazdo.getOutputStream());
- pisz.println(uzytkownik + " połączył się z czatem.");
- pisz.flush();
- czyPolaczony = true;
- } catch (Exception e) {
- tablicaCzata.append("Nieudane połączenie! Spróbuj ponownie. \n");
- uzytkownikTx.setEditable(true);
- }
- sluchaj();
- } else tablicaCzata.append("Jesteś już połączony \n");
- }
- private void rozlaczAkcja(ActionEvent evt) {
- wyslijRozlacz();
- rozlacz();
- }
- private void wyslijAkcja(ActionEvent evt) {
- String nic = "";
- if ((komunikat.getText()).equals(nic)) {
- komunikat.setText("");
- komunikat.requestFocus();
- } else {
- try {
- pisz.println(uzytkownik + ": " + komunikat.getText() + ":" + "Chat");
- pisz.flush();
- } catch (Exception e) {
- tablicaCzata.append("Nie wysłano wiadomości. \n");
- }
- komunikat.setText("");
- komunikat.requestFocus();
- }
- komunikat.setText("");
- komunikat.requestFocus();
- }
- public static void main(String args[]) {
- EventQueue.invokeLater(() -> new Klient().setVisible(true));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement