Barre de défilement en Java
bonjour,
je cherche une méthode pour placer une barre de défilement verticale,
en position basse au lieu de la placer en position haute.
Par défaut, on est toujours en haut du panneau à faire défiler, je voudrais être en bas.
Merci d'avance
Dohm qui vous bouleg tous
je cherche une méthode pour placer une barre de défilement verticale,
en position basse au lieu de la placer en position haute.
Par défaut, on est toujours en haut du panneau à faire défiler, je voudrais être en bas.
Merci d'avance
Dohm qui vous bouleg tous
28 réponses
Résumé de la discussion
Positionner une barre de défilement verticale en bas d’un panneau plutôt qu’en haut constitue le problème central discuté, afin que le contenu défilant reste aligné avec la zone visible. Plusieurs échanges suggèrent d’atteindre le bas en utilisant setValue sur le maximum et d’ajuster l’ordre des appels à revalidate ou validate, certaines propositions recommandant d’éviter des invocations qui brouillent le rafraîchissement. D’autres solutions évoquent des variations de la taille du panneau ou du viewport et le moment du rafraîchissement pour que l’ascenseur se positionne correctement après l’ajout de contenu, avec une nuance sur l’emploi de validate.
-
Salut tout le monde!
String[][] data= new String[]{{"a","b","c"},{"d","e","f"},{"g","h","i"}}; String[]columnNames = new String[]{"Colonne 1","Colonne 2"}; DefaultTableModel dtm = new DefaulTableModel(data, columnsNames); JTable table = new JTable(dtm); JScrollPane jsp = new JScrollPane(table); jsp.setAutoScrolls(true); myFrame.getContentPane().add(jsp);
;-)
HackTrack -
Salut ^^
Je suis un petit peu dans la mouise ^^
Je fait des études de programmation et je dois pour un projet, créer un petit programme avec gestion BD et tout le tralala...
Plein d'entrain je me lance dans le dis projet mais me voila en peu embeter...
peut-on ajouter un JScrollPane à un JPanel??
j'ai essayer : add(new JScrollPane(Nom_du_JPanel));
mais il ne m'affiche pas mon JPanel... et bien entendu, j'ighnore pourquoi...
y a-t-il une techinque secrete??
voila ^^ j'ai tout dis.. cet "ascensseur" repose sur vous ^^
Bien amicalement Cid . -
ModérateurMesdames, messieurs, très cher DAhu ... J'ai l'honneur de vous annoncer que j'ai réussi !
POur ce faire, j'ai cleané mon code et j'ai fait un validate au moment opportun ( validate mets à jour le composant dans lequel le contenu a été modifié et voila )
Dohm ( Si vous avez un stage pour moi faites moi signe !-
Bonjour,
J'ai le problème inverse : j'ai un JTextarea dans un JScrollPanel et lorsque j'y ajoute du texte, je me retrouve tout à la fin.
Pour afficher le début du texte,j 'ai essayé myTextArea.setCaretPosition(0) qui ne marche pas car il est censé être déjà en 0, et myScrollPane.getVerticalScrollBar().setValue(0) ne marche pas non plus :o(
Merci de votre aide!
-
-
Modérateurbah non toujours pas .... Mais je vais m'y replonger bientot ... !!!
Dohm qui vous bouleg tous -
Et en parlant de ça, ça en est où ? T'as résolu le pb ?
Le dahu - Si à gauche j'ai l'amont, c'est bon. Si à gauche j'ai l'aval, j'suis bancal.
-
Modérateurnon pas du tout, je disais juste de façon fort perfide que tu étais ( ne le prends pas mal : à coté de la plaque ).
En fait, si tu lis bien le message, tu découvriras que le problème est autre que déclarer un simple jscrollpane ....
Mais merci qd même !
Dohm qui vous bouleg tous -
tu peux traduire ton message en francais ?
j'y ai compris que dalle !
a propos ma solution a t elle resolu to pb ? -
Modérateurlol !
Y'en a qui cherchent à faire des stats !!!!
Dohm qui vous bouleg tous -
pour placer tres simplement une barre de defilemet pour un composant on fait simplement :
JScrollPane scroll = new JScrollPane(monComposant, int Vorientation, int Horienttation);
getContentPane().add(scroll);
ou Vorientation , Horientation sont des valeurs entieres statiques de la classe JScrollPane on a par ex
JScrollPane.VERTICAL_SCROLLBAR, JScrollPane.HORIZONTAL_SCROLLBAR, ...
consultez l aide en ligne pour plus de details -
Ceci dit, je viens de remarquer un truc...
J'ai téléchargé l'ensemble de tes sources... Entre parenthèses, il est cool ton prog (même si je sais pas du tout ce que c'est qu'un simulateur HDLC :o) L'interface est sympa même si j'aurai deux petites critiques à formuler :
- Le "Menu", je l'ai pris au départ pour un simple JLabel, et je pensais qu'il indiquait que les boutons jaunes faisaient office de menu...
- Toute ton interface est en français, sauf le "Exit" de ton menu ;-)
Bon, revenons à notre problème... J'ai fait un peu de ménage dans ton code (y avait quelques lignes redondantes) et je me suis apperçu d'une chose : au départ, si j'affiche ascenceur.getValue(), j'ai 0 et pour ascenceur.getMaximum() j'ai 507.
Par la suite, à chaque fois que j'affiche ces deux valeurs, leur écart de 507 est conservé... Genre j'obtiens Value = 21 et Maximum = 528, puis 169 - 676, etc.
Vraiment bizarre ce truc. Je te tiens au courrant si j'ai du nouveau.
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
Bof, j'ai rien trouvé de bizarre dans ton code... A priori, je vois pas trop pourquoi ça marche pas...
Essaye de remplacer cette ligne :
panneauScenario.setVerticalScrollBar(ascenceur);
par : ascenceur = panneauScenario.getVerticalScrollBar();
Et essaye de virer les appels à revalidate().
A part ça, je vois vraiment pas ce qui pourrait clocher...
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
> T'es bien sympa ami Dahu, je tenais à te le dire ....
Merci, merci ;-)
Juste une question, es-tu sûr que l'appel à cette méthode (revalidate) est nécessaire ? Je ne l'ai jamais utilisé, et j'ai jamais eu de pb de rafraichissement d'écran...
Essaye peut-être de la virer... des fois que ça viendrait de là :-)
Je télécharge ton code, et j'y jetterai un coup d'oeil demain... Pour l'heure, je vais me coucher (une rude matinée m'attends...)
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
Modérateuroui je le récupères comme ça et la méthode validate permet de valider les modifications et de mettre à jour l'affichage
( T'es bien sympa ami Dahu, je tenais à te le dire .... POur la peine je m'en vais répondre à plusieurs postes )
Si tu veux voir le code : http://dom.pillou.free.fr/TER-projet/sources/fenPrincipale.java
Dohm qui vous bouleg tous -
Deux petites questions :
1) L'ascenceur, tu le récupères bien en faisant un
ascenceur = panneauScenario.getVerticalScrollBar(); ?
2) Elle fait quoi la méthode panneauScenarion.revalidate() ?
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
Modérateurtrop bizarre, là seule façon que j'ai trouvé pour que ça marche une fois sur 2 c'est
/////////// mise à jour de l'ascenceur ////////////////////// panneauScenario.setMinimumSize(new java.awt.Dimension(300, 300)); panneauScenario.setPreferredSize(new java.awt.Dimension(300, 300)); panneauScenario.setViewportView(affichageScenario); // ascenceur.setValue(ascenceur.getMaximum()); System.out.println("//////////////////////////////////////////////////////////"); System.out.println("valeur courante :"+ascenceur.getValue()); System.out.println("max : "+ascenceur.getMaximum()); ascenceur.setValue(ascenceur.getMaximum()); System.out.println("valeur courante2 : "+ascenceur.getValue()); panneauScenario.revalidate(); ascenceur.setValue(ascenceur.getMaximum()); panneauScenario.revalidate();
à l'endroit ou j'augmente la taille de mon texte contenu ds le panneau, et si je ne mets pas 2 "ascenceur.setValue(ascenceur.getMaximum());" ça ne marche pas !
En plus, ça ne marche qu'une fois sur 2. un coup il est en bas, je rajoute du texte, il est au 3 quart, je rajoute du texte, en bas ...ect ...
.... Z'y comprennez qq chose vous ? -
Salut !
La methode pack() permet d'adapter la taille de la fenetre a la taille des composants qu'elle contient (plus precisement a leur preferredSize). Du style elle contient un jScrollPane de 300*300, du coup la taille de la fenetre sera de 300*300 (plus la barre de titre, la barre de menu quand y en a une, et plus aussi l'encadrement).
Quant a la methode setViewPortView, elle sert a inserer le jPanel dans le jScrollPane. Mais je sais pas dans le detail comment ca marche... Pour tout te dire, j'ai genere le code a partir de Sun One Studio (que je trouve vraiment excellent pour faire du design d'interfaces graphiques en Java).
Au pire, t'as un tutorial sur l'utilisation des JScrollPane sur le site de Sun :
http://java.sun.com/docs/books/tutorial/uiswing/components/scrollpane.html
Par contre, c'est en anglais :-(
Si tu bloques encore la-dessus, n'hesites pas !
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
ModérateurJe pige pas ...
Sinon qq questions sur ton code :
à quoi correspond la méthode pack ?
à quoi sert la méthode setViewportView ?
merci pour tes réponses !
Dohm qui vous bouleg tous -
Voilà, le code suivant marche... Regarde ce qui diffère par rapport au tien.
/* * TestDohm.java * * Created on 1 avril 2004, 22:12 */ /** * * @author Bernard */ public class TestDohm extends javax.swing.JFrame { /** Creates new form TestDohm */ public TestDohm() { initComponents(); javax.swing.JScrollBar barre = jScrollPane.getVerticalScrollBar(); barre.setValue(barre.getMaximum()); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { jScrollPane = new javax.swing.JScrollPane(); jPanel = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Test"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jScrollPane.setMinimumSize(new java.awt.Dimension(300, 300)); jScrollPane.setPreferredSize(new java.awt.Dimension(300, 300)); jPanel.setMinimumSize(new java.awt.Dimension(500, 500)); jPanel.setPreferredSize(new java.awt.Dimension(500, 500)); jScrollPane.setViewportView(jPanel); getContentPane().add(jScrollPane, java.awt.BorderLayout.CENTER); pack(); } /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } /** * @param args the command line arguments */ public static void main(String args[]) { new TestDohm().show(); } // Variables declaration - do not modify private javax.swing.JPanel jPanel; private javax.swing.JScrollPane jScrollPane; // End of variables declaration }
Si ça cloche toujours, n'hésite pas...
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
Une opération pour ne plus être bancal ??? Faut pas que je rate cette chance :o)
Bon, je vais essayer de te trouver une soluce...
A+
Si à gauche j'ai l'amont, c'est bon...
Si à gauche j'ai l'aval, j'suis bancal... -
ModérateurMon petit Dahu, je te promets une colkecte au près des Yetis pour te faire opérer de la patte si tu réussis !!!
Dohm qui vous bouleg tous
- 1
- 2
Suivant