Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1477 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JscrollPane contenant un JTextArea et défilement automatique [Resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JscrollPane contenant un JTextArea et défilement automatique [Resolu]

n°200447
bobuse
Posté le 23-08-2002 à 11:50:10  profilanswer
 

Voilà, j'ai un JScrollPane qui contient un JTextArea, jusqu'ici rien de bien extraordinaire. Le seul problème est que le ScrollPane ne défile pas automatiquement lorsque j'ajoute du texte, alors qu'il me semble bien qu'il le fait, normallement, non ?
 
Voilà mon code :
dans le constructeur de ma JFrame (après je touche plus à ces objets) :
 

Code :
  1. //redirection de la sortie standard
  2.         JTextArea stdOutText=new JTextArea();
  3.         stdOutText.setFont(new Font("Courier",Font.PLAIN,14));
  4.         stdOutText.setEditable(false);
  5.         stdOutText.setLineWrap(true);
  6.         stdOutText.setWrapStyleWord(true);
  7.         PrintStream outBak=System.out;
  8.         System.setOut(new PrintStream(new RedirigedStream(stdOutText,outBak)));
  9.         JScrollPane textAreaPane=new JScrollPane(stdOutText);
  10.         textAreaPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  11.         textAreaPane.setPreferredSize(new Dimension(screenWidth,(screenHeight-displayHeight)/2));
  12.         textAreaPane.setIgnoreRepaint(false);

 
et la déclaration de la classe RedirigedStream

Code :
  1. public class RedirigedStream extends OutputStream {
  2.         private JTextArea jta;
  3.         private PrintStream stdOut;
  4.         public RedirigedStream(JTextArea jta,PrintStream stdOut) {
  5.             this.jta=jta;
  6.             this.stdOut=stdOut;
  7.         }
  8.         public void write(int a) throws IOException {
  9.             stdOut.write(a);
  10.             byte [] b={(byte)a};
  11.             jta.append(new String(b,"ISO-8859-1" ));
  12.         }
  13.     }


le "stdOut.write(a);" dans RedirigedStream->write(int) me sert en cas de freeze de mon appli  :ange: , et la redirection m'est utile car je suis en plein écran ...
 
des idées ?


Message édité par bobuse le 23-08-2002 à 15:32:08
mood
Publicité
Posté le 23-08-2002 à 11:50:10  profilanswer
 

n°200467
bobuse
Posté le 23-08-2002 à 12:34:35  profilanswer
 

en fait voilà ma classe (réduite) :
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.io.*;
  5. public class TestFrame extends JFrame {
  6.     // rsolution
  7.     private final int displayWidth;
  8.     private final int displayHeight;
  9.     private final int screenWidth;
  10.     private final int screenHeight;
  11.    
  12.     public TestFrame() {
  13.         super();
  14.         this.setResizable(false);
  15.         this.setUndecorated(true);
  16.        
  17.         getContentPane().setBackground(new Color(0.5f,0.5f,0.5f));
  18.        
  19.         double ratio=(double)768/1365;
  20.         screenWidth=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode().getWidth();
  21.         screenHeight=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode().getHeight();
  22.         if ((double)screenHeight/screenWidth>ratio) {
  23.             displayWidth=screenWidth;
  24.             displayHeight=(int)(screenWidth*ratio);
  25.         } else {
  26.             displayWidth=(int)(screenHeight*ratio);
  27.             displayHeight=screenHeight;
  28.         }
  29.         //redirection de la sortie standard
  30.         JTextArea stdOutText=new JTextArea();
  31.         stdOutText.setFont(new Font("Courier",Font.PLAIN,14));
  32.         stdOutText.setEditable(false);
  33.         stdOutText.setLineWrap(true);
  34.         stdOutText.setWrapStyleWord(true);
  35.         PrintStream outBak=System.out;
  36.         System.setOut(new PrintStream(new RedirigedStream(stdOutText,outBak)));
  37.         JScrollPane textAreaPane=new JScrollPane(stdOutText);
  38.         textAreaPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  39.         textAreaPane.setPreferredSize(new Dimension(screenWidth,(screenHeight-displayHeight)/2));
  40.        
  41.         getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
  42.         this.getContentPane().add(Box.createVerticalStrut((screenHeight-displayHeight)/2));
  43.         JPanel panel=new JPanel();
  44.         panel.setPreferredSize(new Dimension(displayWidth,displayHeight));
  45.         this.getContentPane().add(panel);
  46.         this.getContentPane().add(textAreaPane);
  47.        
  48.         //on enlve le curseur de la souris
  49.         try {
  50.             getContentPane().setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().createImage("" ),new Point(0,0),"no cursor" ));
  51.         } catch (Exception e) {
  52.             e.printStackTrace();
  53.         }
  54.        
  55.         //dessin de la fentre
  56.         this.addWindowListener(new WindowAdapter() {
  57.                                    public void windowClosing(WindowEvent e) {
  58.                                        System.exit(0);
  59.                                    }
  60.                                }
  61.                               );
  62.         this.pack();
  63.         //affichage de la fentre
  64.         this.setVisible(true);
  65.         //passe en mode fullscreen
  66.         GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this);
  67.        
  68.         this.addKeyListener(new MyKeyListener());
  69.         this.requestFocus();
  70.     }
  71.     ////////////////////////////
  72.     // MAIN
  73.     public static void main(String [] args) {
  74.         TestFrame testFrame=new TestFrame();
  75.         for (int i=0;i<15;i++) {
  76.             System.out.println("du texte" );
  77.         }
  78.     }
  79.    
  80.     private class MyKeyListener implements KeyListener {
  81.         public MyKeyListener() {}
  82.         public void keyTyped(KeyEvent e) {}
  83.         public void keyPressed(KeyEvent e) {
  84.             if (e.getKeyCode()==KeyEvent.VK_ESCAPE) {
  85.                 System.exit(0);
  86.             }
  87.         }
  88.         public void keyReleased(KeyEvent e) {}
  89.     }
  90.    private class RedirigedStream extends OutputStream {
  91.         private JTextArea jta;
  92.         private PrintStream stdOut;
  93.         public RedirigedStream(JTextArea jta,PrintStream stdOut) {
  94.             this.jta=jta;
  95.             this.stdOut=stdOut;
  96.         }
  97.         public void write(int a) throws IOException {
  98.             stdOut.write(a);
  99.             byte [] b={(byte)a};
  100.             jta.append(new String(b,"ISO-8859-1" ));
  101.         }
  102.     }
  103. }


Si vous la lancez ([Echap] pour sortir), vous verrez que le JScrollPane ne défile pas, alors qu'il le fait normalement, non ?


Message édité par bobuse le 23-08-2002 à 12:37:56
n°200555
--greg--
Posté le 23-08-2002 à 14:06:18  profilanswer
 

faut mettre des <blink> dans ton texte
[:kunks]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°200592
bobuse
Posté le 23-08-2002 à 14:45:40  profilanswer
 

--greg-- a écrit a écrit :

faut mettre des <blink> dans ton texte
[:kunks]



:heink:  :??:

n°200621
nbarbosa
Posté le 23-08-2002 à 15:09:46  profilanswer
 

y'a qu'a bouger le Caret a la fin de ton fichier, et sa scroll tous seul.

n°200643
bobuse
Posté le 23-08-2002 à 15:31:36  profilanswer
 

nbarbosa a écrit a écrit :

y'a qu'a bouger le Caret a la fin de ton fichier, et sa scroll tous seul.
 




 [:zjk] [:yaisse] Merci !
voilà la ligne à ajouter après le append(...) :
 

Code :
  1. jta.setCaretPosition(jta.getText().length());

n°200843
--greg--
Posté le 23-08-2002 à 17:33:50  profilanswer
 

bobuse a écrit a écrit :

 :heink:  :??:  



désolé, c'était une référence à un autre topic drolissime (hahem), rien à voir, euh. c pas grave :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°200855
oliv5
Pourquoi ? Parce que !
Posté le 23-08-2002 à 17:53:33  profilanswer
 

Citation :

voilà la ligne à ajouter après le append(...) :  
 
Code :
 
  jta.setCaretPosition(jta.getText().length());
 


 
Ouais, mais ca fait chier a chaque append de rajouter ca. On peut surclasser le append pour qu'il le fasse tout seul. Mais dans l'api, ya pas un autoscroll ?
J'ai vu des trucs qui y ressemblent mais rien qui fonctionne  :(  

n°200859
bobuse
Posté le 23-08-2002 à 17:58:26  profilanswer
 

oliv5 a écrit a écrit :

Citation :

voilà la ligne à ajouter après le append(...) :  
 
Code :
 
  jta.setCaretPosition(jta.getText().length());
 


 
Ouais, mais ca fait chier a chaque append de rajouter ca. On peut surclasser le append pour qu'il le fasse tout seul. Mais dans l'api, ya pas un autoscroll ?
J'ai vu des trucs qui y ressemblent mais rien qui fonctionne  :(  
 




keski fé chier ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JscrollPane contenant un JTextArea et défilement automatique [Resolu]

 

Sujets relatifs
[C/C++] Supprimer un répertoire (ou le vider) [Resolu][Emacs] comment spécifier le chemin par défaut du C-X C-F ? (resolu)
[C++/MFC] Empêcher la souris de sortir d'un CRect [RESOLU]ACtion automatique a l'ouverture d'une page en Javascript ou HTML ?
[PHP] Inclure une variable php dans <TITLE>[resolu][Java] Probleme de comprehension avec l'API Cryptix (maj : resolu)
[JS]comment mettre en variable '<script>...</script>' ?[resolu][C] A votre bon coeur, aidez moi a parser ca (resolu)
Faire un SELECT MySQL sur une chaîne contenant des accents[PHP & HTML] nouveau problème de syntaxe (résolu)
Plus de sujets relatifs à : JscrollPane contenant un JTextArea et défilement automatique [Resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR