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

Interfaces Graphiques en Java Discussion :

System.out dans GUI ?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 46
    Points
    46
    Par défaut System.out dans GUI ?
    Bonjour,

    Y'a t'il moyen de rediriger ce qui s'affiche dans System.out dans une interface, dans un JTextField par exemple?

    Les données que je désire afficher sont générées par une classe n'ayant aucun lien avec mon interface graphique.

    Je veux montrer à l'usager que les données sont en cours de traitement en les affichant, je préfère cette solution au JProgressBar car elle est plus informative et semble beaucoup moins compliquée inutilement que l'utilisation d'une barre de progression.


    g0ldenrno

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    la methode System.setOut() est décrite ainsi dans la javadoc :
    setOut
    public static void setOut(PrintStream out)
    Reassigns the "standard" output stream.
    First, if there is a security manager, its checkPermission method is called with a RuntimePermission("setIO") permission to see if it's ok to reassign the "standard" output stream.
    elle te permettra de faire ce que tu veux. Reste pour toi à créer un Stream que ton composant affichera

    Voilà voilà
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Merci pour le tuyau mais comment faire le lien entre une composante graphique et un PrintStream?

    J'ai fait des recherches sur setOut(PrintStream) et j'y trouve seulement de la documentation pour rediriger la sortie vers un fichier et non vers une composante graphique.


    Ou encore...

    Peut-être que l'utilisation du JProgressBar serait plus simple? cependant je me retrouverais avec le même problème; le traitement des données ne se trouve pas dans la même classe que mon interface. Comment pourrais-je faire avancer ce JProgressBar sans y avoir accès?

  4. #4
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    regarde ca
    dit moi si c'est qu'est ce que tu veut.

    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
     
    import java.io.OutputStream;
    import java.io.IOException;
     
    import javax.swing.JTextArea;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 06-Jun-2006
     * Time: 17:48:21
     * To change this template use File | Settings | File Templates.
     */
    public class MyOutputStream extends OutputStream {
     
        private JTextArea myTextArea = null;
     
        public MyOutputStream(JTextArea myTextArea) {
            this.myTextArea = myTextArea;
        }
     
        public void write(int b) throws IOException {
            myTextArea.append( String.valueOf( ( char )b ) );
            //To change body of implemented methods use File | Settings | File Templates.
        }
    }
    un programe de test pour voir si ca redirige bien juste le System.out.

    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
     
    // import java.io.Console;
    import java.io.PrintStream;
    import java.awt.BorderLayout;
    import java.awt.GridBagLayout;
    import java.awt.HeadlessException;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import java.awt.Dimension;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    import javax.swing.SwingUtilities;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.JButton;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 06-Jun-2006
     * Time: 17:50:57
     * To change this template use File | Settings | File Templates.
     */
    public class ConsoleToJTextArea extends JFrame implements ActionListener {
     
        private JTextArea myTextArea = null;
        private JTextField myTextField = null;
     
        public ConsoleToJTextArea() throws HeadlessException {
            myTextArea = new JTextArea();
     
            MyOutputStream myOutputStream = new MyOutputStream(myTextArea);
            PrintStream out = new PrintStream(myOutputStream);
            System.setOut(out);
     
            add(new JScrollPane(myTextArea), BorderLayout.CENTER);
     
            JPanel pnlSouth = new JPanel(new GridBagLayout());
     
            myTextField = new JTextField();
            JButton myButton = new JButton("Afficher");
            myButton.addActionListener(this);
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(5,5,5,5);
            gbc.weightx = 1.0;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            pnlSouth.add(myTextField, gbc);
     
            gbc.weightx = 0.0;
            gbc.fill = GridBagConstraints.NONE;
            pnlSouth.add(myButton);
     
            add(pnlSouth, BorderLayout.SOUTH);
            setPreferredSize(new Dimension(400,300));
            pack();
        }
     
        public void actionPerformed(ActionEvent e) {
            //To change body of implemented methods use File | Settings | File Templates.
            System.err.println(myTextField.getText());
            System.out.println(myTextField.getText());
            myTextField.setText("");
        }
     
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                public void run() {
                    //To change body of implemented methods use File | Settings | File Templates.
                    // Console c = System.console();
     
                    ConsoleToJTextArea c = new ConsoleToJTextArea();
                    c.setLocationRelativeTo(null);
                    c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    c.setVisible(true);
                }
            };
            SwingUtilities.invokeLater(runnable);
        }
    }

    apres, ton truc de progressBar j'ai rien compris.
    tu veux pas reexpliquer?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Wow merci, ce semble être ce dont j'ai besoin, je regarde le code et je t'en redonne des nouvelles.

    Pour ce qui est du JProgressBar, il est dans la classe ou se trouve mon interface graphique (bien entendu). Cependant le traitement qui y sera rattaché se trouve dans une méthode qui est dans une autre classe (J'appelle cette méthode à partir de la classe où se trouve l'interface). Comment est-il possible de faire avancer la JProgressBar à partir de ma classe de traitement si mon JProgressBar est dans une autre classe?

    J'espère avoir été un peu plus clair cette fois.

  6. #6
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    Tu sais pas le passer en parametre tout simplement?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Bon j'ai finalement fait marcher le JProgressBar.

    Cependant, pour une raison inconnue, il s'affiche seulement à la toute fin de mon traitement, comme si la fenêtre principale gelait pendant le traitement.

    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
     
            public JProgressBar pb = new JProgressBar(0,100);
            ....
            pb.setBounds(new Rectangle(0,382,586,15));
            pb.setBackground(Color.WHITE);   
            pb.setBorder(null);
            pb.setIndeterminate(true);
            pb.setVisible(false);
            panel2.add(pb);
            ...
     
            private class GestionBoutons implements ActionListener
            {
                public void actionPerformed(ActionEvent evt)
                {
                    ...
                    else if (evt.getSource() == onglet2_btnOK)
                    {   
                          pb.setVisible(true);
                          GestionCheckEchelle.lireLigne(fichier, onglet2_cboBD.getSelectedItem().toString());
                          pb.setVisible(false);
                    }
                    ...
                }
            }
    J'ai fait des recherches mais rien trouvé.

    Y'a t'il moyen d'empêcher cela?

    Merci,

    g0ldenrno

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par g0ldenrno
    Bon j'ai finalement fait marcher le JProgressBar.

    Cependant, pour une raison inconnue, il s'affiche seulement à la toute fin de mon traitement, comme si la fenêtre principale gelait pendant le traitement.
    Tu as mis le point sur le problème, il faut éxécuter toute action longue dans un thread séparé sinon tu bloque l'EDT(Event Dispatch Thread) et plus rien ne change dans l'affichage tant que tes traitements ne sont pas finies. Il te faut donc faire un thread et appeller chaque modification graphique via invokeLater

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. System.out.print dans condition if
    Par Micawber dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 07/10/2014, 19h17
  2. Rediriger System.out dans un JTextArea ?
    Par ThePhenom dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 24/09/2007, 13h51
  3. Réponses: 6
    Dernier message: 31/10/2006, 15h18
  4. [tomcat 5] [paramétrage] fichier de log System.out.println
    Par Aldo dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/02/2005, 14h41
  5. [Linux]Problème System.out.println + compiler
    Par Dnx dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/09/2004, 22h05

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