Barre de défilement dans un Jpanel

jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010 - 4 janv. 2010 à 15:03
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010 - 5 janv. 2010 à 12:28
Bonjour,

Je découvre java pas à pas et me retrouve confronté à un problème que je ne parviens pas à résoudre à force d'écumage de forums et sources diverses.
Je me tourne donc vers vous pour, j'espère, trouver un peu d'aide!

Je souhaiterai tout simplement insérer des barres de défilement dans mon Jpanel (dans celui-ci s'affiche des miniatures d'images).

Voici le Jpanel en question:


package Jpanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.ResourceBundle.Control;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;

import javax.swing.JTree;
import javax.swing.JScrollPane;
import Composant.Miniature;

import com.sun.java.swing.plaf.nimbus.LoweredBorder;


public class JpanelMiniature extends JPanel {
private JPanel panneau;

public ArrayList<Miniature> listMiniature;

public JpanelMiniature() {
listMiniature = new ArrayList<Miniature>();
FlowLayout flowlayout = new FlowLayout();
flowlayout.setHgap(30);
flowlayout.setVgap(30);
setLayout(flowlayout);
LoweredBorder border = new LoweredBorder();
setBorder(border); 

}


public void selection() {
for (int i = 0; i < this.getComponentCount(); i++) {
Miniature m = (Miniature) getComponent(i);
m.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.lightGray));

}
for (int i = 0; i < listMiniature.size(); i++) {
listMiniature.get(i).setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.blue));
}

}

}  


Je pensais utiliser "Jscrollpane" est-ce la bonne voie ? Et surtout suis-je au bon endroit pour le réaliser ? J'ai testé différentes combinaisons sans succès. Où dois-je mettre ma ligne de code?

Je suis donc preneur de toutes informations sur la manière de procéder étant novice en la matière.

Je vous remercie de m'avoir lu et du temps accordé à cela.
J'attends vos lumières

PY

13 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
4 janv. 2010 à 17:34
Salut,

Normalement, tu n'as rien à changer à ton code actuel. Il suffit d'encapsuler ton JpanelMiniature dans un JScrollPane de cette façon :

JFrame frame = new JFrame("ScrollTest");
JpanelMiniature panel = new JpanelMiniature();
frame.add(new JScrollPane(panel));


Le JScrollPane prend les dimensions qu'on lui donne et fait apparaître des ascenseurs si elles ne suffisent pas à afficher le contenu. En l'occurrence, avec ton FlowLayout, il va tout te mettre sur la même ligne et tu risques d'avoir juste un ascenceur horizontal.
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
4 janv. 2010 à 17:51
Merci à toi pour ta réponse, j'ai essayé d'inserer ce que tu ma donné. Mais il me donne une erreure:

Exception in thread "main" java.lang.StackOverflowError


Où dois-je le placer? ou cela vient-t-il d'autre chose?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
4 janv. 2010 à 18:05
Re,

le mieux c'est que tu nous montres :

- la pile des appels de méthode (disons les 10 lignes du haut) au moment de l'exception (les lignes en rouge dans la console)
- le code correspondant aux méthodes qui figureront dans cette pile

En général ça arrive quand une méthode s'appelle elle-même directement ou pas (je pense que la pile sature après quelques milliers d'appels imbriqués).
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
4 janv. 2010 à 18:32
Une sorte de boucle infinie ....

Voici l'erreur qui sort dans la console:
La derniere ligne se repete plusieurs fois!

Exception in thread "main" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
at java.awt.Window.init(Unknown Source)
at java.awt.Window.(Unknown Source)
at java.awt.Frame.(Unknown Source)
at javax.swing.JFrame.(Unknown Source)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:42)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:43)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:43)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:43)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:43)
at Jpanel.JpanelMiniature.(JpanelMiniature.java:43)




Ca ne semble faire reference que ma class JpanelMiniature:

package Jpanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.ResourceBundle.Control;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.ScrollPaneConstants;

import javax.swing.JTree;
import javax.swing.JScrollPane;
import javax.swing.text.html.parser.ContentModel;

import Composant.FenetrePrincipale;
import Composant.Miniature;

import com.sun.java.swing.plaf.nimbus.LoweredBorder;

public class JpanelMiniature extends JPanel {
private JPanel panneau;
public ArrayList<Miniature> listMiniature;

public JpanelMiniature() {
listMiniature = new ArrayList<Miniature>();
FlowLayout flowlayout = new FlowLayout();
flowlayout.setHgap(30);
flowlayout.setVgap(30);
setLayout(flowlayout);
LoweredBorder border = new LoweredBorder();
setBorder(border); 
JFrame frame = new JFrame("ScrollTest");
JpanelMiniature panel = new JpanelMiniature();
frame.add(new JScrollPane(panel));
}

public void selection() {
for (int i = 0; i < this.getComponentCount(); i++) {
Miniature m = (Miniature) getComponent(i);
m.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.lightGray));	
}
for (int i = 0; i < listMiniature.size(); i++) {
listMiniature.get(i).setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.blue));
}
}
}


Voilà si il te faut autre chose n'hésite pas! Je te remercie beaucoup de prendre du temps pour me dépatouiller, car sur ce coup là je sèche!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
5 janv. 2010 à 09:18
Bonjour.
Dans ton constructeur (JPanelMiniature) il faut virer les lignes.
JFrame frame = new JFrame("ScrollTest");
JpanelMiniature panel = new JpanelMiniature();
frame.add(new JScrollPane(panel));

car ça provoque un appel récursif au constructeur de JpanelMiniature.

Il faut que également faire une autre classe pour gerer ta frame du genre :
class JFrameTest extends JFrame {
    public JFrameTest() {
        super();
        JpanelMiniature panel = new JpanelMiniature();
        this.getContentPane().add(new JScrollPane(panel));
    }
}


Cordialement.
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
5 janv. 2010 à 09:40
Pas mieux!

Que ce soit en créant une autre class à part ou en intégrant ton code à la fin de mon Jpanelminiature! Il ne me donne pas de message d'erreure mais lors de l'execution de mon programme toujours pas de barre de défilement ! te ce même quand je remplit ma fenetre de mes miniatures .... Help!!!

merci à toi Laurent!
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
5 janv. 2010 à 10:02
Re,

J'avoue que maîtriser à peu près Swing m'a pris du temps aussi et même si ça peu paraître aberrant à première vue, il y a toujours une explication logique. Pour qu'on puisse te dire ce qui ne va pas, ça irait plus vite si on avait le code en entier.
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
5 janv. 2010 à 10:44
Voilà toutes mes classes:

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
FenetrePrincipale fenetre = new FenetrePrincipale("EXPERTISE : Renommer vos photos");
fenetre.setVisible(true);
fenetre.pack();

}
}

-----------------------------------------------------------------------------------------------------------------------------------
public class FenetrePrincipale extends JFrame {
protected JpanelArbre panelArbre;
public JpanelMiniature panelMiniature;
protected JpanelOutil panelOutil;

public FenetrePrincipale (String titre) {
super(titre);
setLayout(new BorderLayout());
setPreferredSize(new Dimension(1200,700));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panelArbre = new JpanelArbre(this);
panelMiniature = new JpanelMiniature();
panelMiniature.setBackground(Color.white);
panelOutil = new JpanelOutil(this);
JSplitPane slit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelArbre,panelMiniature);
slit.setDividerLocation(270);
add(slit,BorderLayout.CENTER);
add(panelOutil,BorderLayout.EAST);
}
public JpanelArbre getPanelArbre() {
return panelArbre;
}
public JpanelMiniature getPanelMiniature() {
return panelMiniature;
}
public JpanelOutil getPanelOutil() {
return panelOutil;
}
}
-----------------------------------------------------------------------------------------------------------------------------------
public class Miniature extends JPanel {
protected BufferedImage image;
public String nomFichier = "";
protected String source = "";
protected String extension = "";
protected File fichierImage;
public boolean selectionner = false;
public Miniature (String lienImage,int cpt) {
setPreferredSize(new Dimension(210,250));
setBackground(Color.LIGHT_GRAY);
nomFichier = lienImage;
for (int j = 1; j < cpt; j++) {
int index = nomFichier.indexOf('\\')+1;     
nomFichier = nomFichier.substring(index,nomFichier.length());
}		
source = lienImage.substring(0,lienImage.indexOf(nomFichier));
extension = lienImage.substring(lienImage.indexOf("."),lienImage.length());
// Chargement de l'image
fichierImage = new File(lienImage);
try { image=ImageIO.read(fichierImage); } 
catch (IOException e) { e.printStackTrace() ; }
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
// Dessin de l'image
g.drawImage(image, 5, 5, 200, 200, null);
g.drawString(nomFichier, 5, 230);
}
}
public void setNomImage(String newNomFichier) {		
File destination = new File(source+newNomFichier+extension);
if ((existeDeja(destination.toString()))) {
int i = 0;
String nom = destination.toString();
while (existeDeja(nom)) {
i++;
nom = source+newNomFichier+i+extension;
}
newNomFichier += i;
destination = new File(source+newNomFichier+extension);			
}
boolean bool = fichierImage.renameTo(destination);		
if (bool == true) {
nomFichier = newNomFichier+extension;
}
fichierImage = destination;
}
public boolean existeDeja(String destination) {
boolean result = false;
File[] tabFile;
File sourceFile = new File(source);
tabFile = sourceFile.listFiles();
for (int i = 0; i < tabFile.length; i++) {
if (tabFile[i].toString().equals(destination)) {
result = true;				
}
}
return result;
}
public String getExtension() {
return extension;		
}
}
-----------------------------------------------------------------------------------------------------------------------------------
public class EvenementMiniature implements MouseListener {
protected JPopupMenu menuMiniature;
protected JMenuItem supprMiniature;
protected Miniature miniature;
protected JpanelMiniature panelMiniature;
public EvenementMiniature(Miniature m, JpanelMiniature jpm) {

miniature = m;
panelMiniature = jpm;
// Menu popup
menuMiniature = new JPopupMenu();
// item du menu
supprMiniature = new JMenuItem();
// affectation du texte
supprMiniature.setText("Supprimer");
menuMiniature.add(supprMiniature);
ActionListener menuListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
panelMiniature.remove(miniature);
panelMiniature.listMiniature.remove(miniature);
panelMiniature.repaint();
panelMiniature.validate();
}
};
supprMiniature.addActionListener(menuListener);
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if (e.getButton() == MouseEvent.BUTTON3) {			
//System.out.println("click droit");
menuMiniature.show(miniature, 0, 0);
}		
if (e.getButton() == MouseEvent.BUTTON1) {
//System.out.println("click gauche");
if (miniature.selectionner == false) {
panelMiniature.listMiniature.add(miniature);
panelMiniature.selection();
miniature.selectionner = true;
}
else {
panelMiniature.listMiniature.remove(miniature);
panelMiniature.selection();
miniature.selectionner = false;
}			
}		
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub	
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub	
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub	
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub	
}
}
-----------------------------------------------------------------------------------------------------------------------------------
public class JpanelArbre extends JPanel {
protected JTree  tree;
protected DefaultMutableTreeNode racine;
protected File[] roots; 
protected FenetrePrincipale maFenetreP;
public JpanelArbre(FenetrePrincipale fp) {
setPreferredSize(new Dimension(250,650));
maFenetreP = fp;
// On définit notre premier noeud
racine = new DefaultMutableTreeNode("Poste de travail",true); 
// Création du jtree
tree = new JTree(racine);
tree.setSize(1000,700); 
// On recupère les lecteurs
roots = File.listRoots();
// Pour chaque lecteur
for (int i = 0 ; i<roots.length ; i++)
{ 
// On recupère son contenu grace a getSubDirs
//DefaultMutableTreeNode root = roots[i];
 DefaultMutableTreeNode root = new DefaultMutableTreeNode(roots[i]);
// Et on l ajoute a notre premier noeud
racine.add(root);
 }
 // On met le jtree dans un jscrollpane
 JScrollPane scroll = new JScrollPane(tree);
 scroll.setPreferredSize(new Dimension(250,650));
 scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    tree.addTreeSelectionListener(new TreeSelectionListener() {
      // qd l'utilisateur clique sur un noeud on affiche les informations du noeud
      // sélectionné
      public void valueChanged(TreeSelectionEvent evt) {
        if (evt.getNewLeadSelectionPath() != null) {
          // récupérer le noeud sélectionné
          DefaultMutableTreeNode node = (DefaultMutableTreeNode)evt.getNewLeadSelectionPath().getLastPathComponent();
          if (node.toString() != "Poste de travail") {
        	    File root = new File(node.toString());
        roots = root.listFiles();
        if(roots != null) {
      	for (int i = 0 ; i<roots.length ; i++){ 
      		 DefaultMutableTreeNode racine = new DefaultMutableTreeNode(roots[i],true);
      		 node.add(racine);
}
        }
          }		      		      	
        }
      } 
    });
 tree.addKeyListener(new KeyListener() {
 public void keyPressed(KeyEvent e) {}
 public void keyTyped(KeyEvent arg0) {}
 public void keyReleased(KeyEvent e) {
 if (e.getKeyCode() == KeyEvent.VK_ENTER )  {
 TreePath[] tableauPath = tree.getSelectionPaths();
 for (int i = 0; i < tableauPath.length; i++) {
String lien = tableauPath[i].getLastPathComponent().toString();						
if((lien.endsWith(".JPG") true) || (lien.endsWith(".JPEG") true) || (lien.endsWith(".PNG") == true) ) {														
Miniature miniature = new Miniature(lien,tableauPath[i].getPathCount()-1);
miniature.addMouseListener(new EvenementMiniature(miniature,maFenetreP.getPanelMiniature()));
maFenetreP.getPanelMiniature().add(miniature); 
maFenetreP.getPanelMiniature().validate();
}				
}		
 }
 }
 });
tree.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {				
int nbClick = e.getClickCount();
if (nbClick == 2) {
 TreePath[] tableauPath = tree.getSelectionPaths();
 for (int i = 0; i < tableauPath.length; i++) {
String lien = tableauPath[i].getLastPathComponent().toString();						
if((lien.endsWith(".JPG") true) || (lien.endsWith(".jpeg") true) || (lien.endsWith(".png") == true) ) {														
Miniature miniature = new Miniature(lien,tableauPath[i++].getPathCount()-1);							
miniature.addMouseListener(new EvenementMiniature(miniature,maFenetreP.getPanelMiniature()));
maFenetreP.getPanelMiniature().add(miniature); 
maFenetreP.getPanelMiniature().validate();
}				
}					
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}			
public void mouseReleased(MouseEvent e) {}
 });	 
 // On ajoute notre jscrollpane
 add(scroll);
}
 /**
 * Méthode récursive permettant de récupérer
 * tous les fichiers et sous dossiers d un autre
 * @param root un File qui représente le lecteur ou le repertoire de départ
 * @return DefaultMutableTreeNode
 */
 public DefaultMutableTreeNode getSubDirs(File root)
 {
 // On créé un noeud
 DefaultMutableTreeNode racine = new DefaultMutableTreeNode(root,true);
 // On recupère la liste des fichiers et sous rep
 File[] list = root.listFiles();
 if ( list != null) {
 // Pour chaque sous rep on appel cette methode => recursivité
 for (int j = 1 ; j<list.length ; j++) {
DefaultMutableTreeNode file =new DefaultMutableTreeNode(list[j],true);					
file = getSubDirs(list[j]);
racine.add(file);
 }
 }
 return racine;
} 
}
-----------------------------------------------------------------------------------------------------------------------------------
public class JpanelBoutton extends JPanel{
protected JTextField texte;
protected JButton boutton;
protected JpanelMiniature panelMiniature;	
protected FenetrePrincipale maFP;

public JpanelBoutton (String numBoutton,FenetrePrincipale fp,String titre) {
setPreferredSize(new Dimension(250,40));
panelMiniature = fp.getPanelMiniature();
maFP = fp;
boutton = new JButton(numBoutton);
boutton.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
for (int i = 0; i < panelMiniature.listMiniature.size(); i++) {
panelMiniature.listMiniature.get(i).setNomImage(texte.getText());
panelMiniature.repaint();
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}			
public void mouseReleased(MouseEvent e) {}
});
texte = new JTextField(titre);
add(boutton);
add(texte);
}
public JTextField getTexte() {
return texte;
}
public JButton getBoutton() {
return boutton;
}
}
-----------------------------------------------------------------------------------------------------------------------------------
public class JpanelMiniature extends JPanel {

private JPanel panneau;
public ArrayList<Miniature> listMiniature;

public JpanelMiniature() {
listMiniature = new ArrayList<Miniature>();
FlowLayout flowlayout = new FlowLayout();
flowlayout.setHgap(30);
flowlayout.setVgap(30);
setLayout(flowlayout);
LoweredBorder border = new LoweredBorder();
setBorder(border); 

}

public void selection() {
for (int i = 0; i < this.getComponentCount(); i++) {
Miniature m = (Miniature) getComponent(i);
m.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.lightGray));	
}
for (int i = 0; i < listMiniature.size(); i++) {
listMiniature.get(i).setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.blue));
}
}
}

-----------------------------------------------------------------------------------------------------------------------------------
public class JpanelOutil extends JPanel{
protected FenetrePrincipale maFenetreP;
public JpanelOutil(FenetrePrincipale fp) {
setPreferredSize(new Dimension(250,700));
maFenetreP = fp;
JButton bouttonZero = new JButton("Boutton 0 : Macro complete");
JPanel panelBouttonZero = new JPanel();
panelBouttonZero.setPreferredSize(new Dimension(250,60));
panelBouttonZero.add(bouttonZero);
JpanelBoutton bouttonUn = new JpanelBoutton("1",maFenetreP,"PLAQUE");		
JpanelBoutton bouttonDeux = new JpanelBoutton("2",maFenetreP,"ELEVATION");
JpanelBoutton bouttonTrois = new JpanelBoutton("3",maFenetreP,"TETE");
JpanelBoutton bouttonQuatre = new JpanelBoutton("4",maFenetreP,"PROFIL");
JpanelBoutton bouttonCinq = new JpanelBoutton("5",maFenetreP,"PHASE1");
JpanelBoutton bouttonSix = new JpanelBoutton("6",maFenetreP,"PHASE2");
JpanelBoutton bouttonSept = new JpanelBoutton("7",maFenetreP,"PHASE3");
JpanelBoutton bouttonHuit = new JpanelBoutton("8",maFenetreP,"CDG1");
JpanelBoutton bouttonNeuf = new JpanelBoutton("9",maFenetreP,"PIED1");
JpanelBoutton bouttonDix = new JpanelBoutton("10",maFenetreP,"PIED2");
JpanelBoutton bouttonOnze = new JpanelBoutton("11",maFenetreP,"PIED3");
JpanelBoutton bouttonDouze = new JpanelBoutton("12",maFenetreP,"PIED4");
JpanelBoutton bouttonTreize = new JpanelBoutton("13",maFenetreP,"PORTEE_GAUCHE");
JpanelBoutton bouttonQuatorze = new JpanelBoutton("14",maFenetreP,"PORTEE_DROITE");
JpanelBoutton bouttonQuinze = new JpanelBoutton("15",maFenetreP,"DEFAUT");
JpanelBoutton bouttonSeize = new JpanelBoutton("16",maFenetreP,"DETAIL");
JpanelBoutton bouttonDixsept = new JpanelBoutton("17",maFenetreP,"ACCES");
add(panelBouttonZero);
add(bouttonUn);
add(bouttonDeux);
add(bouttonTrois);
add(bouttonQuatre);
add(bouttonCinq);
add(bouttonSix);
add(bouttonSept);
add(bouttonHuit);
add(bouttonNeuf);
add(bouttonDix);
add(bouttonOnze);
add(bouttonDouze);
add(bouttonTreize);
add(bouttonQuatorze);
add(bouttonQuinze);
add(bouttonSeize);
add(bouttonDixsept);
}
}



Il me reste plusieurs choses à régler pour que je puisse utiliser mon travail de maniere convenable:

- Rajouter la touche Echap pour désélectionner les miniatures
- Un moyen de supprimer toutes les miniatures de l'affichage en une seule fois.
- Et mon fameux ascenseur au dans le Jpanelminiature.

Je suis preneur de toutes les remarques ou aide! si il te faut autre chose jojolemariole
n'hésite pas ;) !

Un grand merci à toi en tout le cas !
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
5 janv. 2010 à 10:55
JSplitPane slit new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelArbre,panelMiniature);
>
JSplitPane slit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelArbre,new JScrollPane(panelMiniature));
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
5 janv. 2010 à 11:20
j'ai bien une barre de défilement mais horizontal! quel est le parametre pour lui indiquer qu'il me faut une barre vertical?

Merci Laurent
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
5 janv. 2010 à 11:29
Par défaut, les barres de défilement apparaissent automatiquement lorsqu'elles sont nécessaires.
Mais tu dois pouvoir les activer avec les méthodes types setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS) / setHorisontalScrollBarPolicy.
Regarde aussi du coté de setSize / setPreferedSize, pour paramétrer le panel contenu dans le jscroll.

Cordialement.
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
5 janv. 2010 à 11:49
C'est le comportement normal puisque tu as utilisé un FlowLayout dans ton panel miniature (lui-même dans un JScrollPane) => il n'est pas limité en largeur.

Tu peux le limiter en largeur avec un setPreferredSize. Mais il me semble que tu es obligé de donner la largeur et la hauteur.

Dans ton cas, il me semble que le plus logique serait de faire un GridLayout au lieu de ton FlowLayout.

GridLayout layout = new GridLayout(0, 10, 30, 30);


Dans ce cas il te mettra 10 images en largeur et prendra la hauteur nécessaire pour caser toutes tes miniatures (avec 10 images en largeur tu devras sûrement avoir un ascenseur horizontal aussi).

javadoc :

GridLayout
public GridLayout(int rows,
int cols,
int hgap,
int vgap)
Creates a grid layout with the specified number of rows and columns. All components in the layout are given equal size.

In addition, the horizontal and vertical gaps are set to the specified values. Horizontal gaps are placed at the left and right edges, and between each of the columns. Vertical gaps are placed at the top and bottom edges, and between each of the rows.

One, but not both, of rows and cols can be zero, which means that any number of objects can be placed in a row or in a column.

All GridLayout constructors defer to this one.

Parameters:
rows - the rows, with the value zero meaning any number of rows
cols - the columns, with the value zero meaning any number of columns
hgap - the horizontal gap
vgap - the vertical gap
Throws:
IllegalArgumentException - if the value of both rows and cols is set to zero
0
jarod34 Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 8 janvier 2010
5 janv. 2010 à 12:28
Merci bcp j'ai quelque chose qui fonctione, plus qu'a approfondir un peu le tout! Merci pour votre aide.

Mais est-il possible de demander à ce que le nombre de miniature afficher soit régler en fonction de l'affichage et non pas lui obliger d'en mettre 10 par ligne?
0
Rejoignez-nous