Salve, sto realizzando un programmino che visualizza una serie di immagini.
Nell'applicazione ci sono 4 pulsanti:
caricaImmagine --> carica la prima immagine dell'elenco
prevButton --> visualizza L'immagine precedente
nextButton --> visualizza l'immagine successiva
playButtom --> visualizza la sequenza di immagini
Per disegnare nel pannello ho creato una classe ImagePanel che estende JPanel e ho sovrascritto il metodo PaintComponent
Il mio problema è che quando premo uno dei tasti non mi modifica l'immagine del pannello.
Ho provato ad utilizzare il metodo repaint ma con scarsi risultati.
Vi posto il codice
Frame Principale:
package it.unisa.adinf.tesi;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class GestioneImmagini extends javax.swing.JFrame implements Runnable {
private static final long serialVersionUID = 1L;
{
//Set Look & Feel
try {
javax.swing.UIManager.setLookAndFeel("javax.swing. plaf.metal.MetalLookAndFeel");
} catch(Exception e) {
e.printStackTrace();
}
}
private JButton CaricaImmagine;
static Graphics g;
private static ImagePanel visualizzaImmagine;
private String[] immagini= {"1","2","3","4","5","6"};
private JButton zoomButton;
private JButton nextButton;
private JButton prevButton;
private JButton playButton;
private int i=0; //i e j mi servono per il comando play,prev e next
private int j=0;
private int stato=0; // 0 --> pause
// 1 --> play
Thread t;
File file=null;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GestioneImmagini inst = new GestioneImmagini();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public GestioneImmagini() {
super();
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
initGUI();
}
private void initGUI() {
// Inserisco i componenti nel frame
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_O N_CLOSE);
getContentPane().setLayout(null);
{
zoomButton = new JButton();
getContentPane().add(zoomButton);
zoomButton.setText("Zoom");
zoomButton.setBounds(260, 376, 66, 26);
zoomButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
zoomButtonActionPerformed(evt);
}
});
zoomButton.setEnabled(false);
}
visualizzaImmagine = new ImagePanel();
getContentPane().add(visualizzaImmagine);
visualizzaImmagine.setBounds(25, 50,300,300);
{
nextButton = new JButton();
getContentPane().add(nextButton);
nextButton.setText("Next");
nextButton.setBounds(195, 376, 60, 26);
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nextButtonActionPerformed(evt);
}
});
nextButton.setEnabled(false);
}
{
playButton = new JButton();
getContentPane().add(playButton);
playButton.setText("Play");
playButton.setBounds(121, 376, 74, 26);
playButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
playButtonActionPerformed(evt);
}
});
playButton.setEnabled(false);
}
{
prevButton = new JButton();
getContentPane().add(prevButton);
prevButton.setText("Prev");
prevButton.setBounds(61, 376, 60, 26);
prevButton.setEnabled(false);
prevButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
prevButtonActionPerformed(evt);
}
});
}
{
CaricaImmagine = new JButton();
getContentPane().add(CaricaImmagine);
CaricaImmagine.setText("Carica Immagine");
CaricaImmagine.setBounds(17, 21, 200, 23);
CaricaImmagine.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
CaricaImmagineActionPerformed(evt);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
{
}
pack();
this.setSize(500, 500);
} catch (Exception e) {
e.printStackTrace();
}
}
private void CaricaImmagineActionPerformed(ActionEvent evt) {
i=0; // devo caricare sempre la prima immagine dell'elenco
file= new File("C:/Users/Francesco/Documents/"+immagini[i]+".gif");
if(file!=null){
visualizzaImmagine = new ImagePanel(file);
visualizzaImmagine.repaint(); qui ho il problema nextButton.setEnabled(true);
playButton.setEnabled(true);
prevButton.setEnabled(true);
zoomButton.setEnabled(true);
}else{
JOptionPane.showMessageDialog(null, "Nessun file selezionato");
}
}
private void prevButtonActionPerformed(ActionEvent evt) {
if(i!=0){
i--;
file= new File("C:/Users/Francesco/Documents/"+immagini[i]+".gif");
visualizzaImmagine = new ImagePanel(file);
visualizzaImmagine.repaint();
qui ho il problema
}
}
}
Gli altri 2 bottoni sono uguali e quindi non li posto.
Classe ImagePanel
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.*;
public class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private BufferedImage image = null;
public ImagePanel(){
}
public ImagePanel(File file) {
super();
try {
image = ImageIO.read(file);
}
catch(IOException ioe) {
ioe.printStackTrace();
}
catch(IllegalArgumentException iae) {
image = null;
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
if(image != null) {
g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
}
else {
g.drawString("Inserire un'immagine", 100, 100);
}
}
public int getLarghezza(){
return image.getWidth();
}
public int getAltezza(){
return image.getHeight();
}
}