IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Application avec interface graphique en java


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut Application avec interface graphique en java
    Bonjour,

    Je souhaiterais créer une application java très simple et basique avec intelliJ qui me permettrait de créer une liste d'éléments et de la gérer (en supprimant et ajoutant des éléments). Le tout avec une interface graphique contenant trois choses. Un bouton ajouter, une fenêtre contenant la liste de mes éléments et un bouton supprimer. Pour ce qui concerne l’interface graphique je compte utiliser GUI Form. Par contre je ne sais pas encore comment “stocker” ma liste d’éléments. Est-ce que vous me conseillez d’utiliser une LinkedList ?

    Merci pour vos conseils.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Par défaut
    Je ne connais pas GUI Form mais si ça se comporte comme Swing tu n'as pas besoin de stocker ta liste d'éléments si ces éléments sont relativement simples. Normalement ton composant graphique "Liste" doit avoir un modèle derrière. Au lieu de faire un modèle de String, tu fais un modèle qui contient tes éléments (normalement tu dois avoir une implémentation de base qui prend une collection typée) et tu définit un renderer qui affichera ce que tu veux comme texte dans la liste. Ainsi lorsque tu voudra récupérer tes éléments tu auras juste à les lire depuis le modèle de ton composant "Liste".

    Cependant si tu tenais absolument à te taper la synchro entre le composant et ta propre collection, une LinkedList pourrait coller mais n'apporte pas grand chose. Tu gagneras en temps de suppression et d'insertion et perdra en temps de parcours. Sauf que dans une GUI, comme il n'y a aucune chance que ton utilisateur puisse insérer manuellement 100 000 éléments à la seconde, cette optimisation ne se verra jamais. Idem pour le temps de parcours la dégradation ne se verra jamais non plus. Donc tu peux prendre n'importe quelle implémentation de List ça ne changera rien dans l'absolu.

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut
    Merci beaucoup pour la réponse. Je vais donc me concentrer sur le GUI. Voici un exemple de ce que je souhaiterais réussir à obtenir comme résultat :



    Est-ce que vous auriez un tutoriel ou une vidéo-tutorielle à me conseiller qui me guiderait étape par étape pour obtenir le résultat ci-dessus en utilisant Intellij IDEA ?

    Merci pour votre aide.

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut
    Pour la partie GUI j'ai commencé par créer un champ texte "descriptionTache" dans lequel j'entre le nom de la tâche à effectuer, ensuite un bouton "ajouterTache" qui est censé faire entrer le nom de la tâche dans la liste et enfin la JList qui va contenir les tâches que je lui ajoute :

    Nom : gui.JPG
Affichages : 3525
Taille : 187,2 Ko


    Maintenant, voici mon code. Je ne sais pas par où commencer pour faire en sorte que le clic sur le bouton "ajouterTache" puisse provoquer l'insertion dans la JList du contenu du champ texte "descriptionTache" :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    package com.codebind;
     
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ContainerAdapter;
    import java.awt.event.ContainerEvent;
     
    /**
     * Created by steg on 15.01.2017.
     */
    public class App {
        private JButton ajouterTache;
        private JPanel panelMain;
        private JList list1;
        private JTextArea descriptionTache;
     
        public App() {
            ajouterTache.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(null,"Tache ajoutée");
     
                }
            });
            list1.addContainerListener(new ContainerAdapter() {
                @Override
                public void componentAdded(ContainerEvent e) {
                    super.componentAdded(e);
                }
            });
        }
     
        public static void main(String[] args) {
            JFrame frame = new JFrame("App");
            frame.setContentPane(new App().panelMain);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    }

  5. #5
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut
    Donc plus personne ne peut m'aider c'est juste ? Ca se termine ici si je comprends bien. Il n'est même pas possible d'avoir juste une piste ou un indice de ce que je dois faire ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Par défaut
    Désolé je n'ai pas eu le temps de revenir sur ce fil depuis ce week-end.

    [Edit : je n'avais pas lu le code que tu as posté et je me suis rendu compte que ma réponse ne correspondait pas à ton besoin, donc je change].

    En fait tu n'es pas loin du tout de la solution:

    Regarde la JavaDoc de JList. Elle t'explique que si tu ne fournis pas de modèle elle en créera un par défaut pour toi mais il sera read-only. Elle t'indique aussi que si tu veux pouvoir faire des modifs dans la liste, Swing met à ta disposition la classe DefaultListModel.

    Il te faut donc juste modifier ta création de liste comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DefaultListModel<String> model = new DefaultListModel();
    JList<String> list = new JList<>(model);
    Et dans l'action du bouton tu fais ça:
    [CODE]model.addElement(myTextBox.getText()); //Le textbox qui contient le nom de la tâche.[CODE]

    A la fin quand tu veux récupérer le contenu de ta liste tu peux faire
    En passant, tu n'as pas besoin de ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            list1.addContainerListener(new ContainerAdapter() {
                @Override
                public void componentAdded(ContainerEvent e) {
                    super.componentAdded(e);
                }
            });

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par wallace27 Voir le message
    Est-ce que vous me conseillez d’utiliser une LinkedList ?
    De nos jours, on ne conseille plus jamais à personne d'utiliser LinkedList. ArrayList offre de bien meilleures perfs, et (étonnement) quel que soit le cas d'utilisation. Cela vient du fait que les tableaux sont des structures de données cache-friendly, car contigües. Cf la préz d'un cador à devoxx:

Discussions similaires

  1. Application réseau avec interface graphique
    Par Invité dans le forum Ada
    Réponses: 7
    Dernier message: 23/09/2013, 20h48
  2. conception d'une application avec interface graphique en c
    Par AngeAbstraction dans le forum Débuter
    Réponses: 6
    Dernier message: 28/09/2012, 15h36
  3. Réponses: 8
    Dernier message: 31/05/2011, 16h06
  4. Bienvenue sur le forum Interfaces Graphiques en Java - règles à respecter par tous
    Par christopheJ dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 31/05/2009, 15h50
  5. Application multiplateforme avec interface graphique
    Par TNorth dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 31/01/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo