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

Composants Java Discussion :

Auto Scrolling JTextArea


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut Auto Scrolling JTextArea
    Salut!

    Je cherche a écrire une visionneuse qui ferait défiler un document texte automatiquement à une certaine vitesse. Pour l'instant j'ai utilisé un JTextArea enrobé dans un JScrollPane mais à part utiliser le caret (je ne trouve pas ça pratique) je ne vois pas comment faire défiler la zone d'affichage.
    Peut être ai-je fait le mauvais choix étant donné ce composant graphique ne reçoit aucune entrée de la part de l'utilisateur, ou serais-je obligé de toucher au ViewPort? (ce que je n'ai jamais fait en Java!)

    Merci pour votre aide!

  2. #2
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut solution
    Salut,

    C'est bon! J'ai trouvé une solution qui marche (à peu près)

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    Public class Player{
            // engine flag
    	boolean			run;
    	// swing components
    	JViewport		view;
    	JTextArea               txtarea;
    	JSlider			speed;
    	JSlider			progress;
    	// listeners
    	KeyAdapter		key;
    	MouseAdapter	        mouse;
     
    	public Player(String text) {
     
    		// engine setup
    		run = false;
     
    		// listeners setup
    		key = new KeyAdapter() {
    			public void keyReleased(KeyEvent e) {
    				// press ESC to quit the program
    				if (e.getKeyCode() == 27) System.exit(0);
    				if (e.getKeyChar() == 'r') {
    					progress.setValue(0);
    					view.setViewPosition(new Point(0, 0));
    				}
    				if (e.getKeyChar() == 'p') {
    					if (run) run = false;
    					else {
    						run = true;
    						timerFactory().start();
    					}
    				}
    			}
    		};
     
    		mouse = new MouseAdapter() {
    			public void mousePressed(MouseEvent e) {
    				switch (e.getButton()) {
    				case MouseEvent.BUTTON1:
    					if (run) run = false;
    					else {
    						run = true;
    						timerFactory().start();
    					}
    					break;
    				case MouseEvent.BUTTON3:
    					progress.setValue(0);
    					view.setViewPosition(new Point(0, 0));
    					break;
    				}
    			}
    		};
     
    		JFrame window = new JFrame("Player");
    		Container tank = window.getContentPane();
    		tank.setLayout(new BorderLayout());
     
    		txtarea = new JTextArea(text);
    		txtarea.addKeyListener(key);
    		txtarea.addMouseListener(mouse);
    		txtarea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 18)); // Font
    		txtarea.setForeground(Color.GREEN); // Font color
    		txtarea.setBackground(Color.BLACK); // Background color
    		txtarea.setEditable(false);
     
    		view = new JViewport();
    		view.setView(txtarea);
     
    		tank.add(view, BorderLayout.CENTER);
     
    		speed = new JSlider(SwingConstants.VERTICAL, 0, 90, 50);
    		speed.addKeyListener(key);
    		speed.setBackground(Color.BLACK);
     
    		tank.add(speed, BorderLayout.WEST);
     
    		progress = new JSlider(SwingConstants.HORIZONTAL, 0, 1000, 0);
    		progress.addKeyListener(key);
    		progress.setBackground(Color.BLACK);
     
    		tank.add(progress, BorderLayout.SOUTH);
     
    		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);
    		// window.pack();
    		window.setVisible(true);
    	}
     
    	private Thread timerFactory() {
    		return new Thread() {
    			public void run() {
    				System.out.println("run");
    				while (progress.getValue() < 1000 && run) {
    					progress.setValue(progress.getValue() + 1);
    					view.setViewPosition(new Point(0,
    							(int) ((float) progress.getValue() / 1000f * (txtarea.getHeight() - view.getHeight()))));
    					try {
    						Thread.sleep(100 - speed.getValue());
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				}
    				run = false;
    			}
    		};
    	}
    }

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

Discussions similaires

  1. Auto-scroll JTextArea Swing
    Par Malrod dans le forum Composants
    Réponses: 7
    Dernier message: 27/04/2015, 16h52
  2. [XL-2002] Auto scroll avec pause
    Par Canidé dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/11/2011, 16h19
  3. [AC-2003] Faire un auto scroll dans un ListBox
    Par Hamadokh dans le forum IHM
    Réponses: 6
    Dernier message: 14/09/2009, 21h38
  4. TREE_VIEW & Auto scrolling
    Par noumag dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 07/08/2007, 15h12
  5. Auto-scroll d'une zone de texte multi ligne
    Par malek_dz77 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/11/2005, 13h09

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