améloration user friendly + liste dynamic (a ameliorer)

This commit is contained in:
basti 2020-12-11 11:38:09 +01:00
parent c5d00ea88f
commit 761fff9101
7 changed files with 137 additions and 70 deletions

View file

@ -11,7 +11,7 @@ public class Main {
//on lance le server d'écoute de cmd //on lance le server d'écoute de cmd
GestionnaireListeUtilisateur.instance().ecoute2(2002); //enlever le 2, debug //TODO PORT = 2001 à 2009 GestionnaireListeUtilisateur.instance().ecoute2(2001); //enlever le 2, debug //TODO PORT = 2001 à 2009
//on crée manuellement des utilisateurs //on crée manuellement des utilisateurs
GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moi$$$LocalHost"); GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moi$$$LocalHost");

View file

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import nom.GestionnaireNom; import nom.GestionnaireNom;
import ui.ListUI;
public class TraitementCmdListe implements Runnable{ public class TraitementCmdListe implements Runnable{
@ -45,7 +46,7 @@ public class TraitementCmdListe implements Runnable{
if (ordre.equals("add") && !nom.equals("null")) { if (ordre.equals("add") && !nom.equals("null")) {
ajouteUtilisateur(GestionnaireListeUtilisateur.instance().getListeUtilisateur(), id, nom, ip); ajouteUtilisateur(GestionnaireListeUtilisateur.instance().getListeUtilisateur(), id, nom, ip, ordre);
//debug //debug
@ -56,9 +57,14 @@ public class TraitementCmdListe implements Runnable{
} }
} }
//mise à jour des graphismes
ListUI.update();
System.out.println("libéré"); System.out.println("libéré");
semaphore.release(); semaphore.release();
} catch (Exception e) {} } catch (Exception e) {}
} }
@ -84,7 +90,7 @@ public class TraitementCmdListe implements Runnable{
//Ajoute les utilisateurs à la listeUtilisateur //Ajoute les utilisateurs à la listeUtilisateur
private void ajouteUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id, String nom, String ip) { private void ajouteUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id, String nom, String ip, String ordre) {
boolean inListe = false; boolean inListe = false;
@ -94,6 +100,7 @@ public class TraitementCmdListe implements Runnable{
inListe = true; inListe = true;
TypeListeUtilisateur utilisateur = listeUtilisateur.get(i); TypeListeUtilisateur utilisateur = listeUtilisateur.get(i);
utilisateur.nom = nom; utilisateur.nom = nom;
} }
} }

View file

@ -115,26 +115,17 @@ public class GestionnaireNom{
//check la disponibilité est asocie un nom à l'utilisateur si c'est bon, et prévient les autres. //check la disponibilité est asocie un nom à l'utilisateur si c'est bon, et prévient les autres.
public boolean nommer(String nom) { public void nommer(String nom) {
if (verifierDisponibiliteNom(nom)) {
setNom(nom); setNom(nom);
GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost");
return true;
}
return false;
} }
//debug //debug
public boolean nommer2(String nom) { public void nommer2(String nom) {
if (verifierDisponibiliteNom(nom)) {
setNom(nom); setNom(nom);
GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost"); GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + "LocalHost");
return true;
}
return false;
} }

View file

@ -7,29 +7,34 @@ import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JTable; import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
//import javax.swing.AbstractListModel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import clavardage.gestionnaireClavardage; import clavardage.gestionnaireClavardage;
import liste.GestionnaireListeUtilisateur; import liste.GestionnaireListeUtilisateur;
import nom.GestionnaireNom; import nom.GestionnaireNom;
import liste.TypeListeUtilisateur; import liste.TypeListeUtilisateur;
import java.util.ArrayList;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollPane;
public class ListUI extends JFrame implements Runnable{ public class ListUI extends JFrame implements Runnable{
private static final long serialVersionUID = 42L; private static final long serialVersionUID = 42L;
private JPanel contentPane; private JPanel contentPane;
private JTable table; public static JList<String> list = new JList<String>();
private DefaultTableModel dtm = new DefaultTableModel(null, new String[] {"Name"}); //private JList<TypeListeUtilisateur> list2;
/** /**
@ -71,24 +76,37 @@ public class ListUI extends JFrame implements Runnable{
//JScrollPane //JScrollPane
//On extrait les nom de la liste des Utilisateurs
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
ArrayList<String> liste = new ArrayList<String>();
for (int i=0; i< listeUtilisateur.size(); i++) {
liste.add(listeUtilisateur.get(i).nom);
}
ajouterNomListe(dtm, liste);
JScrollPane scrollPane = new JScrollPane(); JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(67, 23, 303, 158); scrollPane.setBounds(67, 23, 303, 158);
contentPane.add(scrollPane); contentPane.add(scrollPane);
/*
//list ?
list = new JList<String>();
list.setModel(new AbstractListModel<String>() {
private static final long serialVersionUID = 41L;
public String[] values = new String[] {"A", "B", "C"};
public int getSize() {
return values.length;
}
public String getElementAt(int index) {
return values[index];
}
});
scrollPane.setViewportView(list);
*/
listeInitial();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollPane.setViewportView(list);
//JTable
table = new JTable();
scrollPane.setViewportView(table);
table.setModel(dtm);
// Bouton Rename // Bouton Rename
JButton renameButton = new JButton("Rename"); JButton renameButton = new JButton("Rename");
@ -107,11 +125,7 @@ public class ListUI extends JFrame implements Runnable{
JButton connectButton = new JButton("Connect"); JButton connectButton = new JButton("Connect");
connectButton.addActionListener(new ActionListener() { connectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) { //Appuyer public void actionPerformed(ActionEvent arg0) { //Appuyer
connect();
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
connect(row, col);
} }
}); });
@ -136,20 +150,23 @@ public class ListUI extends JFrame implements Runnable{
* Méthode * Méthode
*/ */
// à améliorer ... (suppression ?) // à améliorer ... (suppression ?)
public void ajouterNomListe(DefaultTableModel dtm, ArrayList<String> liste) { public void ajouterNomListe(DefaultTableModel dtm, ArrayList<String> liste) {
for (String t : liste) { for (String t : liste) {
if (!t.equals(GestionnaireNom.instance().getNom())) { if (!t.equals(GestionnaireNom.instance().getNom())) {
dtm.addRow(new Object[] {t}); dtm.addRow(new Object[] {t});
} }
} }
} }
// Lance une communication avce l'Utilisateur voulu // Lance une communication avce l'Utilisateur voulu
public void connect(int row, int col) { public void connect() {
try{ try{
String nom = (String) table.getValueAt(row, col); String nom = (String) list.getSelectedValue();
gestionnaireClavardage gc = gestionnaireClavardage.instance(); gestionnaireClavardage gc = gestionnaireClavardage.instance();
gc.createSession(nom); gc.createSession(nom);
@ -158,4 +175,36 @@ public class ListUI extends JFrame implements Runnable{
catch (Exception e) {} catch (Exception e) {}
} }
//mise en place de la liste de base
public void listeInitial() {
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
DefaultListModel<String> defaultListModel = new DefaultListModel<String>();
for (int i=0; i<listeUtilisateur.size(); i++){
if(!listeUtilisateur.get(i).nom.equals(GestionnaireNom.instance().getNom())) {
defaultListModel.addElement(listeUtilisateur.get(i).nom);
}
}
list.setModel(defaultListModel);
}
// mise à jour des graphismes
public static void update() { //TODO à refaire un plus jolie (observer ou autre)
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
DefaultListModel<String> defaultListModel = new DefaultListModel<String>();
for (int i=0; i<listeUtilisateur.size(); i++){
if(!listeUtilisateur.get(i).nom.equals(GestionnaireNom.instance().getNom())) {
defaultListModel.addElement(listeUtilisateur.get(i).nom);
}
}
list.setModel(defaultListModel);
}
} }

View file

@ -5,36 +5,32 @@ import java.awt.EventQueue;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import bdd.Liaison;
import clavardage.gestionnaireClavardage;
import liste.GestionnaireListeUtilisateur;
import liste.TypeListeUtilisateur;
import nom.GestionnaireNom;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import bdd.Liaison;
import clavardage.gestionnaireClavardage;
import nom.GestionnaireNom;
public class Login_RegisterUI extends JFrame implements Runnable{ public class Login_RegisterUI extends JFrame implements Runnable{
@ -43,7 +39,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
private JPanel contentPane; private JPanel contentPane;
private JTextField idField; private JTextField idField;
private JTextField passwordField; private JPasswordField passwordField;
@ -133,7 +129,8 @@ public class Login_RegisterUI extends JFrame implements Runnable{
idField.setColumns(10); idField.setColumns(10);
//passwordField //passwordField
passwordField = new JTextField(); passwordField = new JPasswordField();
passwordField.setEchoChar((char) 0);
passwordField.addKeyListener(new KeyAdapter() { //Presser Entrer passwordField.addKeyListener(new KeyAdapter() { //Presser Entrer
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
@ -146,16 +143,18 @@ public class Login_RegisterUI extends JFrame implements Runnable{
passwordField.addFocusListener(new FocusAdapter() { //Focus passwordField.addFocusListener(new FocusAdapter() { //Focus
@Override @Override
public void focusGained(FocusEvent e) { public void focusGained(FocusEvent e) {
String s = passwordField.getText(); String s = String.valueOf(passwordField.getPassword());
if ( s.equals("Password") ) { if ( s.equals("Password") ) {
passwordField.setText(""); passwordField.setText("");
passwordField.setEchoChar((char) 8226);
} }
} }
@Override @Override
public void focusLost(FocusEvent e) { public void focusLost(FocusEvent e) {
String s = passwordField.getText(); String s = String.valueOf(passwordField.getPassword());
if ( s.equals("") ) { if ( s.equals("") ) {
passwordField.setText("Password"); passwordField.setText("Password");
passwordField.setEchoChar((char) 0);
} }
} }
}); });
@ -210,7 +209,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
// Teste la validité des champs. // Teste la validité des champs.
public void enter2() { public void enter2() {
String id = idField.getText(); String id = idField.getText();
String pwd = passwordField.getText(); String pwd = String.valueOf(passwordField.getPassword());
//debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main)) //debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main))
if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après ) if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après )
@ -239,7 +238,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
public void enter() { public void enter() {
String id = idField.getText(); String id = idField.getText();
String pwd = passwordField.getText(); String pwd = String.valueOf(passwordField.getPassword());
PreparedStatement st; PreparedStatement st;
ResultSet rs; ResultSet rs;
@ -276,6 +275,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
else { else {
System.out.println("BDD FAIL"); System.out.println("BDD FAIL");
JOptionPane.showMessageDialog(null, "Invalid Id / Password", "Login error", 2); JOptionPane.showMessageDialog(null, "Invalid Id / Password", "Login error", 2);
passwordField.setText("");
} }

View file

@ -5,18 +5,19 @@ import java.awt.EventQueue;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.Dimension; import java.awt.Dimension;
import nom.GestionnaireNom;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.JLabel; import javax.swing.JLabel;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import nom.GestionnaireNom;
public class NomUI extends JFrame implements Runnable{ public class NomUI extends JFrame implements Runnable{
private static final long serialVersionUID = 42L; private static final long serialVersionUID = 42L;
@ -118,7 +119,7 @@ public class NomUI extends JFrame implements Runnable{
// On choisit son Username // On choisit son Username
private void nommer(String nom) { private void nommer(String nom) {
// Si l'on se renomme on peut annuler en entrant rien ou Reprendre le même Username // Si l'on se renomme on peut annuler en entrant rien ou Reprendre le même Username
if( (GestionnaireNom.instance().getNom() != null) && (nom.isBlank() || nom.toLowerCase().equals(GestionnaireNom.instance().getNom().toLowerCase()) ) ) { if( (GestionnaireNom.instance().getNom() != null) && (nom.isBlank() || nom.equals(GestionnaireNom.instance().getNom()) ) ) {
dispose(); dispose();
Thread t = new Thread(new ListUI()); Thread t = new Thread(new ListUI());
@ -127,7 +128,7 @@ public class NomUI extends JFrame implements Runnable{
} }
else { else {
//Sinon on essaye de prendre un nom //Sinon on essaye de prendre un nom
if (GestionnaireNom.instance().verifierDisponibiliteNom(nom) ) { if (GestionnaireNom.instance().verifierDisponibiliteNom(nom) || nom.toLowerCase().equals(GestionnaireNom.instance().getNom().toLowerCase()) ) {
//Celui-ci ne peut pas être "vide" //Celui-ci ne peut pas être "vide"
if (!nom.isBlank()) { if (!nom.isBlank()) {
GestionnaireNom.instance().nommer2(nom); //enlever le 2 à la fin //TODO GestionnaireNom.instance().nommer2(nom); //enlever le 2 à la fin //TODO

View file

@ -34,6 +34,12 @@ import javax.swing.JProgressBar;
import javax.swing.JScrollBar; import javax.swing.JScrollBar;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import javax.swing.JSlider; import javax.swing.JSlider;
import javax.swing.JList;
import javax.swing.AbstractListModel;
// TEST ONLY
public class ToutUI { public class ToutUI {
@ -210,5 +216,18 @@ public class ToutUI {
JLabel lblNewLabel_1 = new JLabel("JList : updtae needed, JSeparator : non compris ...."); JLabel lblNewLabel_1 = new JLabel("JList : updtae needed, JSeparator : non compris ....");
lblNewLabel_1.setBounds(23, 361, 316, 14); lblNewLabel_1.setBounds(23, 361, 316, 14);
frmTitle.getContentPane().add(lblNewLabel_1); frmTitle.getContentPane().add(lblNewLabel_1);
JList list = new JList();
list.setModel(new AbstractListModel() {
String[] values = new String[] {"A", "B", "C"};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
list.setBounds(470, 140, 77, 76);
frmTitle.getContentPane().add(list);
} }
} }