Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher le résultat de sa console sur une fenêtre

Problème affichage de la console dans une fenêtre

Sujet résolu
    24 mai 2016 à 15:19:08

    Bonjour à tous, étant débutant en Java (pas mon langage préféré) , je dois créer une application domotique, qui pourra récolter les résultats de mes différents capteurs, thermostat ect...

    J'ai donc crée une fenêtre avec un bouton, lorsqu'on clique dessus, cela nous récolte les données sur un site que j'ai hébergé sur mon ftp

    Cependant lorsque je lance le programme, les données s'affichent sur la console et non sur la fenêtre que j'ai crée.

    Merci de pouvoir m'aider dans ce projet, cordialement.

    import java.awt.Color;
    
    import java.awt.FlowLayout;
    
    import javax.swing.JPanel;
    
    import javax.swing.JFrame;
    
    import javax.swing.JLabel;
    
    import javax.swing.JButton;
    
    import java.awt.event.ActionListener;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.net.MalformedURLException;
    
    import java.net.URL;
    
    import java.net.URLConnection;
    
    import java.awt.event.ActionEvent;
    
    import java.io.*;
    
    import java.net.*;
    
    import java.io.IOException;
    
    import java.io.OutputStream;
    
    import javax.swing.JTextArea;
    
    public class SimpleFenetre extends JFrame implements ActionListener
    
    {
    
    public SimpleFenetre()
    
    {
    
    super();
    
    build();
    
    }
    
    private void build()
    
    {
    
    setTitle("Netatmo");
    
    setSize(800,480); 
    
    setLocationRelativeTo(null); 
    
    setResizable(false);
    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
    setContentPane(buildContentPane());
    
    }
    
    private JPanel buildContentPane()
    
    {
    
    JPanel panel = new JPanel();
    
    panel.setLayout(new FlowLayout());
    
    panel.setBackground(Color.white);
    
    JLabel label = new JLabel("Valeurs du Netatmo");
    
    JButton bouton = new JButton("Cliquez ici !");
    
    bouton.addActionListener(this);
    
    panel.add(bouton);
    
    panel.add(label);
    
    return panel;
    
    }
    
    public void actionPerformed(ActionEvent e)
    
    {
    
    try
    
    {
    
    URL url = new URL("http://www.cvcelec.com/Examples/monnetatmo.php");
    
    URLConnection con=url.openConnection();
    
    InputStream input = con.getInputStream();
    
    while(input.available()>0)
    
    System.out.print((char)input.read());
    
    }
    
    catch(MalformedURLException b)
    
    {
    
    System.out.println(b);
    
    }
    
    catch(IOException b)
    
    {
    
    System.out.println(b);
    
    }
    
    } 
    
    } 



    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2016 à 15:49:22

      Salut.

      Tu peux stocker ta sortie ((char)input.read()) dans un String au fur et à mesure, puis ajouter un JLabel à ta frame et mettre ton String dans ce JLabel.

      Pour accéder à ton JLabel tu peux le déclarer comme variable de classe.

      -
      Edité par paccval 24 mai 2016 à 15:49:52

      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2016 à 16:03:14

        Merci pour ta réponse, désolé de t'importuner, j'ai l'impression de passer pour un con, désolé de l'expression mais peux tu être plus explicite sil te plait ? Je suis vraiment novice dans ce langage et rien que ce code, ça ma fallu pas mal de recherche et de temps. Je stock ma sortie dans un string au fur et a mesure ? c'est a dire au fur et a mesure. Et je n'ai pas compris la suite
        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2016 à 16:25:02

          Pour faire simple 

          System.out.print((char)input.read());

          System.out.print(X) => affiche dans la console X
          Donc c'est normal que ca affiche dans la console

          Si tu veux afficher dans ta fenêtre, il te faut une sorte d'objet (comme un JLabel) qui va contenir ton flux(ici un texte) .

          Exemple :

          JLabel label = new JLabel("Valeurs du Netatmo");

          L'exemple te crée un JLabel qui va affiché "Valeurs du Netatmo", toi tu veux qu'il affiche ton texte.

          Donc tu va créer un new JLabel (monTexte);

          Sachant que monTexte = monTexte + (char)input.read() dans ton while

          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2016 à 16:32:16

            T'inquiètes pas on est là pour apprendre.

            Pour stocker dans un String tu peux faire :

            String str = "";
            while(input.available()>0) {
                str += (char)input.read();
            }

            De cette façon tout le texte que tu souhaites afficher se trouve dans la variable str. Tu peux y accéder plus facilement.

            Ensuite pour afficher ce texte, tu peux tout simplement créer un autre JLabel comme tu l'as déjà fait (ligne 79) :

            JLabel resultat = new JLabel();

            Mais pour que ce JLabel soit accessible de partout, tu le déclare comme variable de classe (hors d'une fonction, souvent après ta déclaration de classe). Pour toi ça donnerait :

            public class SimpleFenetre extends JFrame implements ActionListener
            {
                JLabel resultat = new JLabel();
            
                //ton code

            Tu peux donc insérer ce JLabel avec les autres composants de ton JPanel, dans ta fonction buildContentPane :

            panel.add(bouton);
            panel.add(label);
            panel.add(resultat);

            Puis, dans ta fonction actionPerformed, tu peux aussi y accéder et mettre dedans le String que tu as récupérer juste avant :

            String str = "";
            while(input.available()>0) {
                str += (char)input.read();
            }
            resultat.setText(str);

            Et normalement ce qui s'affichait avant dans ta console s'affichera maintenant dans ta fenêtre.

            Bien sur ce n'est pas le code le plus propre ou le plus efficace, mais j'ai fait en sorte que tu puisse comprendre.

            -
            Edité par paccval 24 mai 2016 à 16:37:07

            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2016 à 16:38:44

              Hello!

              Tu peut aussi utiliser un JTextArea qui, à la différence du JLabel, a la capacité de pouvoir afficher du texte sur plusieurs lignes et est plus adapté aux longs textes.

              De plus, tu devrais utiliser un BorderLayout plutôt qu'un FlowLayout, si tu veut avoir un rendu plus efficace.

              Voilà un morceau de code dont tu pourra tirer des infos utiles:

              	JTextArea console_displayer = new JTextArea();
              	private class ConsolePanel extends JPanel{
              		public ConsolePanel(){
              			this.setLayout(new BorderLayout());
              			console_displayer.setLineWrap(true);
              			console_displayer.setWrapStyleWord(true);
              			console_displayer.setEditable(false);
              			this.add(console_displayer, BorderLayout.CENTER);
              			new Thread(new Acquisition()).start();
              		}
              	}
              	
              	private class Acquisition implements Runnable{
              		Scanner sc = new Scanner(System.in);
              		
              		@Override
              		public void run(){
              			try {
              				URL url = new URL("http://www.cvcelec.com/Examples/monnetatmo.php");
              				URLConnection con=url.openConnection();
              				InputStream input = con.getInputStream();
              				while(input.available())
              					console_displayer.getDocument().insertString(console_displayer.getDocument().getEndPosition().getOffset(), input.read(), null);
              			}catch(BadLocationException e){e.printStackTrace();
              		}
              	}



              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2016 à 16:51:50

                Merci pour vos réponses, plusieurs choix s'offrent à moi. Je vais donc tester ça et je revient vers vous, merci pour votre aide les gars :)

                -
                Edité par MrNeokonan. 24 mai 2016 à 16:52:07

                • Partager sur Facebook
                • Partager sur Twitter
                  24 mai 2016 à 17:04:39

                  J'ai une question pour paccval, où dois je mettre le code pour stocker le string ?

                  String str = "";
                  while(input.available()>0) {
                  str += (char)input.read();
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mai 2016 à 17:20:51

                    MrNeokonan. a écrit:

                    J'ai une question pour paccval, où dois je mettre le code pour stocker le string ?

                    String str = "";
                    while(input.available()>0) {
                    str += (char)input.read();
                    }

                    Au même endroit qu'avant, dans la fonction actionPerformed.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mai 2016 à 17:29:14

                      Désolé je viens de comprendre, je recommence 

                      -
                      Edité par MrNeokonan. 24 mai 2016 à 17:38:16

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mai 2016 à 17:45:08

                        Merci infiniment paccval, ça fonctionne, je me suis trompé dans la déclaration des input. Par contre comment ordonner l'affichage du résultat ? saut de ligne, centré ect ??

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mai 2016 à 17:49:32

                          Genre ça m'affiche cela
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 mai 2016 à 10:11:21

                            Pour gérer l'affichage, je te conseille de lire ce cours. Il t'expliquera beaucoup mieux que moi comment organiser ta fenêtre :)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 mai 2016 à 12:09:36

                              Bonjour cela ne m'aide pas pour le positionnement du résultat de ma console, ça me montre juste comment positionner mes boutons et textes. Moi je veux juste faire des espaces entre chaque phrases, comme le montre sur la photo au dessus :/. Merci de votre aide, une idée ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 mai 2016 à 12:15:37

                                Salut,

                                Pour mettre en forme ton String tu peux utiliser les caractères suivants

                                • "\n" pour un retour à la ligne
                                • "\t" pour une tabulation
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 mai 2016 à 15:10:15

                                  D'accord Kodvir, je dois le faire dans mon programme java ? si oui, où dans le programme ? et si non, faut il le mettre dans le ficher php, là où je reçois les donnés de mon Netatmo ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 avril 2018 à 19:14:02

                                    Bonjour, j'ai un problème j'arrive pas a afficher ce qu'il y a dans ma console sur  ma fenetre voici mon code :  

                                    -
                                    Edité par ORORVENCY 12 avril 2018 à 19:15:23

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Afficher le résultat de sa console sur une fenêtre

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown