Witam. Jestem dość początkującym jeśli chodzi o jave. Piszę pewien programik i mam mały problem z odświeżaniem się elementów graficznych w oknie. Wszystko zaczyna działać poprawnie jeśli przejdę po całej tablicy zdjęć, machnę oknem za granice widoczności pulpitu i dopiero działa jak powinno. Stosuję metodę repaint() po każdej zmianie w oknie lecz zapewne ma ona jakieś ograniczenia lub po prostu źle z niej korzystam tak czy siak proszę o jakąś wskazówkę.
public class PhotoViewer extends JFrame implements MouseListener{
private static final long serialVersionUID = 1L;
private ImagePaint buttonNext,buttonBack,imageTableFull[];
private String imageName[];
private int size = 0,currentImage = 0;
public PhotoViewer(){
setTitle("Photo Viewer");
setSize(806,528);
setLocationRelativeTo(null);
setResizable(false);
setLayout(null);
new SystemLook();
try{
BufferedImage image = ImageIO.read(new File("bin/next.png"));
buttonNext = new ImagePaint(image,64,64);
buttonNext.setBounds(730,5,64,64);
add(buttonNext);
buttonNext.addMouseListener(this);
image = ImageIO.read(new File("bin/back.png"));
buttonBack = new ImagePaint(image,64,64);
buttonBack.setBounds(5,5,64,64);
add(buttonBack);
buttonBack.addMouseListener(this);
} catch (IOException ioe) {
System.out.println(ioe);
}
imageTableFull = new ImagePaint[100];
imageName = new String[100];
}
public void getTable(ImagePaint ip,String name){ //zapisuje do tablicy obrazki
imageTableFull[size] = ip;
imageName[size++] = name;
}
public void setClean(){ //czysci okno, tabele obrazkow i tabele nazw, resetuje rozmiar aktualnego katalogu
remove(imageTableFull[currentImage]);
for(int i = 0;i < imageTableFull.length;i++){
imageTableFull[i] = null;
imageName[i] = "";
}
size = 0;
}
public void showImage(int a){
this.currentImage = a;
for(int i = 0;i < size;i++){
remove(imageTableFull[i]);
}
imageTableFull[a].setBounds(0,0,800,500);
add(imageTableFull[a]);
setTitle("Photo Viewer"+ " - " +imageName[a]);
repaint();
}
public void mouseClicked(MouseEvent mc) {}
public void mouseEntered(MouseEvent mc) {}
public void mouseExited(MouseEvent mc) {}
public void mousePressed(MouseEvent mc) {}
@Override
public void mouseReleased(MouseEvent mc) {
Object zrodlo = mc.getSource();
if(zrodlo == buttonNext){
if(currentImage+1 < size) showImage(++currentImage);
else JOptionPane.showMessageDialog(null,"Koniec galerii","Informacja",JOptionPane.INFORMATION_MESSAGE);
}
else if(zrodlo == buttonBack){
if(currentImage > 0) showImage(--currentImage);
else JOptionPane.showMessageDialog(null,"Koniec galerii","Informacja",JOptionPane.INFORMATION_MESSAGE);
}
}
}