cs_arsenelupin
Messages postés2Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention28 janvier 2004
-
21 janv. 2004 à 10:32
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 2016
-
20 sept. 2010 à 12:01
J'ai une JFrame sur laquelle je veux mettre une barre de défilement parce que y'en a beaucoup d'informations à afficher dessus. Dois-je passer par un JPanel ou il y a-t-il une autre solution ?
Pour l'instant j'ai écrit ceci (qui ne marche pas, sinon je serai pas là)
JScrollPane scrollF;
JPanel pan = new JPanel();
pan.setLayout(null);
pan.add( /* composant */ );
pan.setBounds(0,0,1500,1500);
scrollF = new JScrollPane(pan);
scrollF.setBounds(0,0,500,650);
scrollF.setVisible(true);
pan.setVisible(true);
this.getContentPane().add(scrollF);
Ce code m'affiche tout sauf la barre de défilement.
Je ne m'en sors pas, vite que quelqu'un me vienne en aide !!!
ioiomatic
Messages postés44Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention 9 mars 20043 21 janv. 2004 à 12:09
Salut,
les mises en forme swing sont assez déconcertantes dans un 1er temps. Pour ne pas entrer dans les détails il faut savoir que si ton JPanel, quelque soit sa taille, ne contient aucun composant, tu n'auras jamais tes barres de défilement. Montons un cran plus haut. Si ton JScrollpane est capable d'afficher son contenu dans ta JFrame, tu n'auras jamais tes barres de défilement. Cela veut tout simplement dire que tes barres de défilement ne s'afficheront que si la taille de ta JScrollPane venait à être plus grande que ta JFrame et ce seulement si elle l'est(plus grande) par la taille imposée par son contenu. Oui, je sais c'est pas évident à comprendre.
Pour compléter mon explication voilà un exple:
import javax.swing.*;
import java.awt.*;
public class ArseneLupin{
public static void main(String[] arg){
JFrame maframe = new JFrame("Arsene Lupin");
JPanel pan = new JPanel();
JScrollPane scrollF;
JTextArea texte = new JTextArea();
//for(int i = 0; i < 10; i++){
//texte.append("il était une fois un cheval de troies\n");
//}
pan.add(texte);
pan.setBounds(0,0,20,20);
scrollF = new JScrollPane(pan);
scrollF.setMinimumSize(new Dimension(200, 200));
scrollF.setVisible(true);
pan.setVisible(true);
maframe.setSize(new Dimension(150, 150));
maframe.getContentPane().add(scrollF);
maframe.setVisible(true);
}
}
Tu as juste à faire un copier coller. dans un 1er temps, tu compileras et executeras le code tel quel, puis dans un 2nd temps, tu retireras les slash pour prendre en compte le traitement de la boucle for, et recompileras et réexecuteras l'exple.....Je pense que tu y verras plus clair....
Bon courage Arsene !
cs_arsenelupin
Messages postés2Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention28 janvier 2004 28 janv. 2004 à 10:53
Ton code m'a fait comprendre certaines choses.
Cependant, lorsque j'ajoute la ligne :
pan.setLayout(null)
Ca ne marche plus, il ne m'affiche plus les composants. Pourquoi, et comment faire pour obtenir malgré tout la l'affichage des composants et de la scroll ?
J'ai besoin de la ligne de code ci-dessus car je place tous mes composants grâce à la méthode setBounds.
ioiomatic
Messages postés44Date d'inscriptionmardi 13 janvier 2004StatutMembreDernière intervention 9 mars 20043 28 janv. 2004 à 18:21
tu as nécessairement besoin d'un layout pour ajouter des composants sur d'autres composants. Par défaut, quand tu instancies un composant pouvant potentiellement contenir un autre composant, un layout est aussi défini. Le layout est une couche sur laquelle tu vas pouvoir ajouter d'autres composant. Donc ton panel sans layout ne pourra rien recevoir. la ligne pan.setLayout(null) retire donc le layout de ton panel et celui-ci ne peut plus recevoir de composant d'où le résultat que tu obtiens. Ce qu'il faut retenir: ce n'est pas le composant qui reçoit un autre composant mais son layout(ce serait la colle qui te permet de faire tenir le papier peint sur un mur). la méthode setLayout sert plutôt à définir un layout particulier pour un composant. Si tu veux avoir la liberté de donner les dimensions que tu souhaites à tes composants, sers toi de GridBagLayout pour le layout, et GridBagConstraints pour la mise en forme.