problème d' offset initial d'un JScrollPane et de requestFocus

problème d' offset initial d'un JScrollPane et de requestFocus - Java - Programmation

Marsh Posté le 13-12-2003 à 17:45:41    

Bonjour;  
J'ai deux petits problèmes pour lesquels je n'ai toujours pas trouvé de solution. Ce n'est pas crucial mais disons que pour finiolé le boulot se serai pas mal.
Donc voila :
 
1) J'ai un JTextArea que j'ai associé à un JScroolPane. Lors de ouverture de mon prog le tout est affiché et le JTextArea charge les logs des exécutions précédentes (à partire d'un ficher). J'aimerai que le scroll soit initialement descendu au maximum et si possible systématiquement. Je ne sais pas du tout si java offre une telle fonctionnalité tout faite ou si vous avez un idée de la manière dont je doit m'y prendre?
 
2) Est-il possible de faire un requestFocus (ou identique) sur une frame contenant une table mais rien d'autre (ni button, ni field, etc).
En fait les objet du type JTable contiennent une fonction membre requestFocus() mais dans mon cas elle n'as aucun effet.... Je ne comprend pas pk?
voici le bout de mon code conserné :

Code :
  1. JFrame jframe= new JFrame("Resultat de la Selection" );
  2. jframe.setSize(640,480);
  3.         JTable jtable1 = new  JTable( tmp, nomsCols );
  4.         javax.swing.JScrollPane table1ScrollPane;
  5.         table1ScrollPane = new javax.swing.JScrollPane();
  6.         table1ScrollPane.setViewportView(jtable1);
  7.         jframe.getContentPane().add( table1ScrollPane, java.awt.BorderLayout.CENTER );
  8.         jtable1.setAutoResizeMode(jtable1.AUTO_RESIZE_OFF);
  9.         table1ScrollPane.setViewportView(jtable1);
  10.         jtable1.requestFocus();             
  11.         jframe.show();


En fait en tapant ceci je me rend compte que cela est peut être (et même sans doute) du à la fenêtre ouvrante qui se replace en fait systématiquement au-dessus de celle-ci après le show(), (en cas de sleep juste après le jframe.show() ma table reste afficher pdt le temps du sleep puis retourne en arrière plan.
 
Si le bout de code suivant à l'aire correct peut être pourriez vous me donnez quelques raisons possible d'une telle situation.
 
 
Merci   :jap:  

Reply

Marsh Posté le 13-12-2003 à 17:45:41   

Reply

Marsh Posté le 13-12-2003 à 20:48:00    

1) tu déplace le 'caret' en fin de texte.
2) j'en sais rien et les insterface qui prennent le focus d'autorité, ça me gave. En particulier quand je suis en train de tapper un mot de passe dans mon browser, et qu'une fenêtre de messagerie s'ouvre.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-12-2003 à 09:50:10    

pour le 1)
 

Code :
  1. Document d = jta.getDocument();
  2. Caret caret = jta.getCaret();
  3. caret.setDot(d.getEndPosition().getOffset());

Reply

Marsh Posté le 15-12-2003 à 09:46:12    

Et puis pour que ton JScrollPane descende tout seul, tu rajoute un DocumentListener sur ton JTextArea et tu implemente la methode insertUpdate comme ca:
 

Code :
  1. public void insertUpdate(final DocumentEvent e) {
  2.     final int pos = e.getOffset() + e.getLength();
  3.     jTextArea.setCaretPosition(pos);
  4.   }//end insertUpdate


---------------
Light is right
Reply

Marsh Posté le 15-12-2003 à 14:55:16    

Merci à tous pour vos réponses.
 
Mais si je fait ça :  
 

Code :
  1. javax.swing.text.Document d = jta.getDocument();
  2. javax.swing.text.Caret caret = jta.getCaret();
  3. caret.setDot(d.getEndPosition().getOffset());
  4. jta.setCaret(caret);


 
y se passe rien  :??:  
 
et pour le DocumentListener: j'ai pris exemple sur un button et son addActionListener mais apparement c'est pas trop ça  :sweat:  

Code :
  1. d.addDocumentListener(new java.awt.event.TextListener(){
  2.         public void actionPerformed(javax.swing.event.DocumentEvent evt) {
  3.                 insertUpdate(evt);
  4.             }
  5.         });


 
je pense que je vais renoncer à cette idée..... :ange:


Message édité par peak le 15-12-2003 à 14:56:41
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed