J'essaye d'afficher une liste d'images dans un JScrollPane. Cette liste est modifiée avec un listener sur une JTable.
J'ai besoin de redimensionner mes images pour ne pas avoir quelque chose d'énorme, ce qui fonctionne plutôt bien. Ce qui ne fonctionne pas en revanche, c'est la JScrollPane qui ne crée pas les scrolls bars...
Salut! J'ai été confronté au même genre de pb, et la solution que j'ai trouvé c'est de mettre ton panel d'image dans une JList et de créer un nouveau cellRenderer pour ta JList.
Si tu as du mal à trouver la solution je peux te donner un exemple!
Ok merci, effectivement ça fonctionne. J'avais vu l'idée, mais seulement pour des JLists composées d'icônes de textes.
Je poste mon code pour ceux que ça intéresse. Donc je rappel que dans mon cas, je voulais afficher une liste d'images de taille fixe en fonction d'une sélection dans une JTable
BufferedImage model[] = new BufferedImage[NB_IMAGES];
JList<BufferedImage> imgList = new JList<>(model);
imgList.setCellRenderer(new PrevCellRenderer());
imgList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
imgList.setFixedCellWidth(PrevCellRenderer.IMG_WIDTH);
imgList.setFixedCellHeight(PrevCellRenderer.IMG_HEIGHT);
// Listener
ImageListModel model = new ImageListModel();
for (BufferedImage img : images)
model.add(img);
prevImgList.setModel(model);
public class PrevCellRenderer extends JPanel implements ListCellRenderer {
public static final int IMG_WIDTH = 400,
IMG_HEIGHT = 400;
BufferedImage img;
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
img = (BufferedImage) value;
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(img, 0, 0, IMG_WIDTH, IMG_HEIGHT, this);
g.dispose();
img = resizedImage;
return this;
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img, 0, 0, IMG_WIDTH, IMG_HEIGHT, this);
g.dispose();
}
}
public class ImageListModel extends AbstractListModel<BufferedImage> {
private List<BufferedImage> data; // The data of ListModel
/** Constructor */
public ImageListModel() {
data = new ArrayList<BufferedImage>();
}
/** Constructor with data
*
* @param data : (List<BufferedImage>)
*/
public ImageListModel(List<BufferedImage> data) {
this.data = data;
}
@Override
public BufferedImage getElementAt(int arg0) {
return data.get(arg0);
}
public void add(BufferedImage img) {
data.add(img);
}
/**
* @param index : (int) index of data
* @param img : (BufferedImage) new data
*/
public void setElementAt(int index, BufferedImage img) {
data.set(index, img);
}
@Override
public int getSize() {
return data.size();
}
}
Voilà encore merci
Maxime
- Edité par Max314 25 août 2015 à 5:07:38
Pensez aux +1 lorsqu'on réponse vous a aidé et au "résolu" ;)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.