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 :

Utiliser une classe extérieure


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Utiliser une classe extérieure
    Bonjour,

    Je suis novice, donc il se peut que je ne sois pas très précis, ne m'en tenez pas trop rigueur svp ^^
    Je dois, pour un projet, réaliser une interface graphique. Dans ce projet, je dois, entre autres, assembler différents messages en un seul.
    Cela est déjà fait, et marche. Mais maintenant mon interface graphique doit afficher les différents messages (qui sont stockés dans un fichier), et, par un clic sur un bouton, les assembler et afficher le message final.

    J'ai donc deux JTextField pour les messages (un pour les multiples messages ("input"), l'autre pour le message assemblé ("screen")), et un bouton.
    Mon problème réside dans l'action que fait le bouton : il doit faire appel aux méthodes de la classe Assembler, mais je ne sais pas comment y faire appel.

    Je vous mets mon code, tel que j'aimerais que ça marche (donc ça ne marche pas en l'état, mais c'est pour que vous compreniez ce que je veux faire).


    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    public class CommutateurGUI {
    
    	JFrame fenetre;
    	JButton button1;
    	JTextArea input;
    	JTextArea screen;
    	JTextField nom;
    	Assembleur a;
    
    	public CommutateurGUI(File file_input, Assembleur a) {
    		fenetre = new JFrame("Commutateur");
    		button1 = new JButton("Assembler");
    		button1.addActionListener(new ActionButton1(this));
    		input = new JTextArea();
    		screen = new JTextArea();
                    assembleur = a;
    
    		Scanner scan;
    		try {
    			scan = new Scanner(file_input);
    			while (scan.hasNextLine()) {
    				while (scan.hasNextInt()) {
    					Integer key = scan.nextInt();
    					input.append(key.toString() + "");
    				}
    				input.append("\n");
    			}
    		} catch (FileNotFoundException e) {
    			System.out.println("File "
    					+ file_input.getAbsolutePath()
    					+ " could not be found on filesystem");
    		}
    
    		Container contenu = fenetre.getContentPane();
    
    		contenu.setLayout(new GridBagLayout());
    
    		GridBagConstraints gbc = new GridBagConstraints();
    
    		gbc.weightx = 1;
    		gbc.gridx = 0;
    		gbc.gridy = 1;
    		gbc.insets = new Insets(10, 15, 10, 15);
    		contenu.add(button1, gbc);
    
    		GridBagConstraints gbcscreen = new GridBagConstraints();
    		gbcscreen.gridy = 0;
    		gbcscreen.weighty = 1;
    		gbcscreen.gridx = 3;
    		gbcscreen.anchor = GridBagConstraints.LINE_END;
    		gbcscreen.insets = new Insets(10, 15, 10, 150);
    		contenu.add(screen, gbcscreen);
    
    		GridBagConstraints gbcinput = new GridBagConstraints();
    		gbcinput.gridy = 0;
    		gbcinput.weighty = 1;
    		gbcinput.gridx = 0;
    		gbcinput.anchor = GridBagConstraints.LINE_START;
    		gbcinput.insets = new Insets(10, 150, 10, 15);
    		contenu.add(input, gbcinput);
    
    		fenetre.pack();
    		fenetre.setVisible(true);
    	}
    
    	public static void main(File args, Assembleur a) {
    		new CommutateurGUI(args,a);
    	}
    }
    
    class ActionButton1 implements ActionListener {
    	private CommutateurGUI vue;
    
    	public ActionButton1(CommutateurGUI c) {
    		vue = c;
    	}
    
    	public void actionPerformed(ActionEvent button1) {
    		vue.screen.append("Paquet assemble : ");
    		file_input.assembler();
                    //Et la suite... c'est pas le propos ici ^^
    	}
    }
    J'ai mis en gras ce qui ne marche pas et que j'aimerais faire.

    Ce que j'aimerais faire, serait que quand le programme principal lance l'interface graphique, il la lance avec comme paramètre Assembler et file_input, comme ça j'affiche file_input dans input, et j'utilise les méthodes de Assembler sur input.

    J'espère que vous avez compris ce que je voulais faire, merci de votre aide !

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Dosce Voir le message
    Bonjour,

    Je suis novice, donc il se peut que je ne sois pas très précis, ne m'en tenez pas trop rigueur svp ^^
    Je dois, pour un projet, réaliser une interface graphique. Dans ce projet, je dois, entre autres, assembler différents messages en un seul.
    Cela est déjà fait, et marche. Mais maintenant mon interface graphique doit afficher les différents messages (qui sont stockés dans un fichier), et, par un clic sur un bouton, les assembler et afficher le message final.

    J'ai donc deux JTextField pour les messages (un pour les multiples messages ("input"), l'autre pour le message assemblé ("screen")), et un bouton.
    Mon problème réside dans l'action que fait le bouton : il doit faire appel aux méthodes de la classe Assembler, mais je ne sais pas comment y faire appel.

    Je vous mets mon code, tel que j'aimerais que ça marche (donc ça ne marche pas en l'état, mais c'est pour que vous compreniez ce que je veux faire).


    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    public class CommutateurGUI {
    
    	JFrame fenetre;
    	JButton button1;
    	JTextArea input;
    	JTextArea screen;
    	JTextField nom;
    	Assembleur a;
    
    	public CommutateurGUI(File file_input, Assembleur a) {
    		fenetre = new JFrame("Commutateur");
    		button1 = new JButton("Assembler");
    		button1.addActionListener(new ActionButton1(this));
    		input = new JTextArea();
    		screen = new JTextArea();
                    assembleur = a;
    
    		Scanner scan;
    		try {
    			scan = new Scanner(file_input);
    			while (scan.hasNextLine()) {
    				while (scan.hasNextInt()) {
    					Integer key = scan.nextInt();
    					input.append(key.toString() + "");
    				}
    				input.append("\n");
    			}
    		} catch (FileNotFoundException e) {
    			System.out.println("File "
    					+ file_input.getAbsolutePath()
    					+ " could not be found on filesystem");
    		}
    
    		Container contenu = fenetre.getContentPane();
    
    		contenu.setLayout(new GridBagLayout());
    
    		GridBagConstraints gbc = new GridBagConstraints();
    
    		gbc.weightx = 1;
    		gbc.gridx = 0;
    		gbc.gridy = 1;
    		gbc.insets = new Insets(10, 15, 10, 15);
    		contenu.add(button1, gbc);
    
    		GridBagConstraints gbcscreen = new GridBagConstraints();
    		gbcscreen.gridy = 0;
    		gbcscreen.weighty = 1;
    		gbcscreen.gridx = 3;
    		gbcscreen.anchor = GridBagConstraints.LINE_END;
    		gbcscreen.insets = new Insets(10, 15, 10, 150);
    		contenu.add(screen, gbcscreen);
    
    		GridBagConstraints gbcinput = new GridBagConstraints();
    		gbcinput.gridy = 0;
    		gbcinput.weighty = 1;
    		gbcinput.gridx = 0;
    		gbcinput.anchor = GridBagConstraints.LINE_START;
    		gbcinput.insets = new Insets(10, 150, 10, 15);
    		contenu.add(input, gbcinput);
    
    		fenetre.pack();
    		fenetre.setVisible(true);
    	}
    
    	public static void main(File args, Assembleur a) {
    		new CommutateurGUI(args,a);
    	}
    }
    
    class ActionButton1 implements ActionListener {
    	private CommutateurGUI vue;
    
    	public ActionButton1(CommutateurGUI c) {
    		vue = c;
    	}
    
    	public void actionPerformed(ActionEvent button1) {
    		vue.screen.append("Paquet assemble : ");
    		file_input.assembler();
                    //Et la suite... c'est pas le propos ici ^^
    	}
    }
    J'ai mis en gras ce qui ne marche pas et que j'aimerais faire.

    Ce que j'aimerais faire, serait que quand le programme principal lance l'interface graphique, il la lance avec comme paramètre Assembler et file_input, comme ça j'affiche file_input dans input, et j'utilise les méthodes de Assembler sur input.

    J'espère que vous avez compris ce que je voulais faire, merci de votre aide !
    J'ai juste jeter un coup d’œil sur ce que tu a posté au vu du thème j'aimerais te poser une question:
    Pourquoi ne pas déclarer ces classes externes dans ton code et pétiller juste leurs méthodes?
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Parce que ce n'est qu'un exemple, il y a bien d'autres classes et autres choses à faire dans mon interface graphique, et tout a été fait à part.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Dosce Voir le message
    Parce que ce n'est qu'un exemple, il y a bien d'autres classes et autres choses à faire dans mon interface graphique, et tout a été fait à part.
    Ok en quoi ça t’empêche donc de les déclarer dans ta fenêtre?
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Parce que cette interface doit pouvoir être déclarée avec des paramètres extérieurs. Par exemple, elle doit marcher aussi bien avec un assembleur a1 qu'avec un assembleur a2

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Dosce Voir le message
    Parce que cette interface doit pouvoir être déclarée avec des paramètres extérieurs. Par exemple, elle doit marcher aussi bien avec un assembleur a1 qu'avec un assembleur a2
    Ok désolé j'avais mal compris ton problème j'ai un soucis où est ce que tu initialise Assembleur et File?
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Justement, ce sont des paramètres que le programme principal donnera quand il lancera l'interface.

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Dosce Voir le message
    Justement, ce sont des paramètres que le programme principal donnera quand il lancera l'interface.
    Pour effectuer des test tu devrai les initialiser pour voir le résultat
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Mais même si j'initialisais dans mon programme, que ça marche ou que ça ne marche pas, ça ne m'avancerait pas dans mon problème, à savoir : comment est-ce que je fais quand c'est initialisé à l'extérieur ?

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Dosce Voir le message
    Mais même si j'initialisais dans mon programme, que ça marche ou que ça ne marche pas, ça ne m'avancerait pas dans mon problème, à savoir : comment est-ce que je fais quand c'est initialisé à l'extérieur ?
    Moi je ne vois pas quel est ton problème initialise dans le main et tu passe en paramètre lorsque tu crée l'objet de ta fenêtre
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  11. #11
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void actionPerformed(ActionEvent button1) {
        vue.screen.append("Paquet assemble : ");
        file_input.assembler();   
    }
    Ce code n'a aucun sens !

    As-tu vu une méthode qui s'appelle "assembler" dans le classe Java File ?

    Tu dois plutôt écrire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void actionPerformed(ActionEvent button1) {
        vue.screen.append("Paquet assemble : ");
        String texteAssemble = assembleur.assembler( file_input );   
    }
    Où la méthode "assembler" sera dédié à l'assemblage de ta chaine de caractère et qui prend en paramètre le fichier que tu souhaite traiter. De plus cette méthode sera spécifique à ton assembleur ce qui te permet d'avoir potentiellement plusieurs méthodes différentes si tu as plusieurs type d'assembleurs.

    De plus il n'est pas possible en Java d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(File args, Assembleur a) {
    	new CommutateurGUI(args,a);
    }
    Tu ne peux pas modifier la signature de ta méthode main. Dans ton cas c'est juste une méthode statique qui s'appelle main mais qui ne correspond pas au point d'entré de ton programme.

    Utilise simplement le constructeur de ta classe et/ou des setters pour recevoir des paramètres extérieur.

    Edit :

    Je viens de voir un autre problème : assembleur = a; tu n'as pas de variable qui s'appelle assembleur.
    Toi tu as déclarer Assembleur a;.
    En plus de ça,, à aucun moment tu ne stocke ton fichier quelque part dans ta classe, ducoup je vois pas comment tu peux y faire référence..

    Ducoup tu dois écrire
    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
    public class CommutateurGUI {
    
    	JFrame fenetre;
    	JButton button1;
    	JTextArea input;
    	JTextArea screen;
    	JTextField nom;
    	Assembleur assembleur;
            File file;
    
    	public CommutateurGUI(File file_input, Assembleur a) {
    		fenetre = new JFrame("Commutateur");
    		button1 = new JButton("Assembler");
    		button1.addActionListener(new ActionButton1(this));
    		input = new JTextArea();
    		screen = new JTextArea();
                    assembleur = a;
                    file = file_input;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void actionPerformed(ActionEvent button1) {
    		vue.screen.append("Paquet assemble : ");
    		assembleur.assembler( file );
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2006, 15h26
  2. [POO] Quand utiliser une classe ?
    Par Gwipi dans le forum Langage
    Réponses: 8
    Dernier message: 05/05/2006, 14h31
  3. Réponses: 5
    Dernier message: 03/04/2006, 09h57
  4. [Applet]utiliser une classe d'un package dans une applet
    Par jeromejanson dans le forum Applets
    Réponses: 1
    Dernier message: 30/06/2005, 08h13
  5. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57

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