|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
[Java] Inserire una lista di immagini in un JScrollPane......
Ciao a tutti....allora vi spiego rapidamente il mio problema:
devo creare una finestra divisa in due parti (finestra divisa verticalmente),la parte sx deve contenere una lista (verticale) di immagini (file .jpg.......di dimensione ridotta) mentre la parte dx l'anteprima dell'immagine selezionata.deve essere possibile usare una scrollBar. Ho usato uno JSplitPane per dividere in due la finestra,a cui gli ho "assegnato" due JScrollPane(sx,dx). Non riesco ad inserire nel JScrollPane di sx la lista delle immagini....riesco solo a inserire una singola immagine.....che tra l'altro non riesco a ridimensionare.... Come posso fare?????? ho provato anche ad usare due label ,uno per ogni JScrollPane....ma non è cambiato niente!!!!! Grazie per la pazienza....... Questa è una parte del codice: window=new FinestraFile("Presentazione Power Point"); Toolkit theKit=window.getToolkit(); Dimension wndSize=theKit.getScreenSize(); window.setBounds(wndSize.width/4,wndSize.height/4,wndSize.width/2,wndSize.height/2); window.addWindowListener(this); JScrollPane AnteprimaImmagine=new JScrollPane(); JButton [] ListaBottoni={ new JButton(new ImageIcon("D:/Checco/Progetto/AnteprimaFinestra/prova1.jpg")), new JButton(new ImageIcon("D:/Checco/Progetto/AnteprimaFinestra/prova.jpg")), }; JList list = new JList(ListaBottoni); JScrollPane listScroller = new JScrollPane(list); JSplitPane splitPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane.setLeftComponent(listScroller); splitPane.setRightComponent(AnteprimaImmagine); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(100); splitPane.setContinuousLayout(true); window.getContentPane().add(splitPane); window.setVisible(true); .......invece di visualizzare i due JButton mi visualizza due stringhe tipo: javax.swing.JButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,..... Aiuto!!!!!!!!!!!!!!!!!! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Se vuoi visualizzare qualunque altra cosa che non sia una stringa, devi creare un tuo cell-renderer. Quindi prova a fare così: a) Invece di creare un array di JButton, crea un array di JLabel (anche un JLabel può avere una ImageIcon). b) Crea un nuovo cell-renderer. Prova questo codice: Codice:
class MyLabelCellRenderer implements ListCellRenderer
{
public Component getListCellRendererComponent (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
JLabel label = (JLabel) value;
if (isSelected)
{
label.setBackground (list.getSelectionBackground ());
label.setForeground (list.getSelectionForeground ());
}
else
{
label.setBackground (list.getBackground ());
label.setForeground (list.getForeground ());
}
label.setEnabled (list.isEnabled ());
label.setOpaque (true);
return label;
}
}
Codice:
list.setCellRenderer (new MyLabelCellRenderer ());
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
JLabel al posto di JButton.......
ok....grande funziona!!!!!le immagini vengono caricate nel JScrollPane di sx....però non riesco a ridimensionarle.....e poi visto che devono essere clikkabili posso farlo lo stesso anche se uso Jlabel?????
mi hai dato una speranza.......ciao ciao e grazie |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
Vorrei ridimensionarle nella JList......cioè fare una finestra simile ad una Power Point.....quindi sulla sx avere la lista di immagini (ridimensionate come in PP)....e poi avere la possibilità,al click su un'immagine,di vedere l'ingrandimento nell'area a dx......
adesso le immagini che carico nella parte sx sono enormi...... scusa....non ho capito ma il Listener lo devo associare ad ogni JLabel creato? |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ridimensionare una immagine in Java è sicuramente possibile. Bisogna andare a vedere le classi per la gestione "avanzata" delle immagini. Non ho codice alla mano ma appena ho tempo faccio qualche ricerca. Vedi anche tu se trovi qualcosa. Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per caricare una "miniatura":
Codice:
final int ALTEZZA = 100; //altezza delle icone BufferedImage original = ImageIO.read(ilFile); Image scaled = original.getScaledInstance(-1, ALTEZZA, Image.SCALE_FAST); -Dsun.java2d.ddscale=true L'accelerazione dovrebbe essere sempre disponibile nel caso in cui si usi la pipeline opengl (-Dsun.java2d.opengl=True) |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
ok....la miniatura funziona....però la risoluzione è davvero scarsa....sembra un'immagine fatta con i puntini.....
quindi devo guardarmi qulacosa sulla gestione avanzata delle immagini???? con questo cosa ci devo fare????? Dsun.java2d.ddscale=true .....non so cosa sia.......grazie dell'attenzione..... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per un'icona più raffinata usa l'interpolazione più pesante disponibile:
Codice:
final int ALTEZZA = 100; //altezza delle icone BufferedImage original = ImageIO.read(ilFile); Image scaled = original.getScaledInstance(-1, ALTEZZA, Image.SCALE_SMOOTH); java -Dsun.java2d.ddscale=true LaClassMain [invio] |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
immagini tutte attaccate......
ok.....ci siamo quasi.....solo che non riesco a distanziare le slide.....le inserisce tutte attaccate....come faccio a distanziarle un po.....
grazie ancora |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
Border brd = BorderFactory.createEmptyBorder (5, 5, 5, 5); label.setBorder (brd);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
ok......
ok va benissimo.....sto provando ad associare un MouseListener ad ogni elemento che creo nella JList....
.......All'interno del for che mi controlla la creazione,l'inserimento e la configurazione di ogni immagini che inserisco........ MouseListener listener = new AssociaClick(); lista[i].addMouseListener(listener); } class AssociaClick extends MouseAdapter{ public void mousePressed(MouseEvent e) { qui dovrei inserire le istruzioni per far visualizzare l'ingrandimento dell'immagine selezionata nel pannello di dx....o sbaglio???? solo che visto che ovviamente ho fatto un file per ogni tipologia di operazioni (Creazione Finestra,Creazione Anteprime,.....),come faccio a riprendere il riferimento la pannello di dx???? } } |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Secondo: dovresti creare una classe che incapsula il nome del file e, ad esempio, un ImageIcon con la miniatura. Un array di oggetti di questa classe lo passi poi al JList nel costruttore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 43
|
Listener....
Ho inserito questa istruzione prima del ciclo che mi controlla l'inserimento degli elementi nella JList immagini.....
immagini.addListSelectionListener(new AssociaAntep()); AssociaAntep() è la nuova classe.....ma non dovrei inserire qualche istruzione all'interno del ciclo così da aggiungere un Listener per ogni elemento della JList??? |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ok ... senti, facciamo che ti posto un esempio completo???
Fai così: - Spacchetta lo zip in allegato (ci sono 5 sorgenti .java). - Compila con: javac ImageViewerApplication.java. - Metti qualche immagine a tua scelta gif/jpeg nella stessa directory (il caricamento è "dinamico", prende quello che trova lì). - Avvia con: java ImageViewerApplication (poi clicca sulle miniature). Faccio presente che l'esempio che ho scritto è sicuramente migliorabile, sia dal punto di vista della interfaccia utente che per le prestazioni globali. Ogni commento è ben accetto, naturalmente.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#17 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 5
|
io devo fare una cosa del genere, anche più semplice,
cercherò di partire dal tuo esempio, grazie mille andbin per averlo condiviso! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:40.



















