J'ai un programme java que quand un bouton est cliqué, il met à jour l'image sur l'écran à l'image correspondante. cela fonctionnera pour les 15 premiers clics puis cela provoquera une erreur d'heapspace java. Je pense que c'est à cause de la façon dont je mets à jour le jpanel qui contient l'image buffered mais je ne suis pas sûr de la raison. Mon code pour obtenir rendre les JPanel contiennent la nouvelle image est,java gui changer l'image provoque une erreur d'espace de mémoire
public class extraScreenPanel {
static JPanel screenPanel = new JPanel(new BorderLayout());
public static JPanel extraScreenPanel(int dispNum)
{
JLabel label = new JLabel("" + dispNum + "");
label.setPreferredSize(new Dimension(800, 600));
//label.setUI(new VerticalLabelUI(true));
label.setVerticalAlignment(SwingConstants.TOP);
screenPanel = imgDisp(dispNum);
label.setForeground(Color.white);
label.setFont(new Font("Serif", Font.BOLD, 200));
screenPanel.add(label, BorderLayout.PAGE_END);
return screenPanel;
}
public static JPanel imgDisp(int picNum) {
/* String url[] = new String[5000];
String part1;
url[0] = "C:/PiPhotoPic/pic16.jpg";
for(Integer i=1;i<5000;i++){
if(i<10){part1 = "C:/temp/new0000000";}
else if(i<100){part1 = "C:/temp/new000000";}
else if(i<1000){part1 = "C:/temp/new00000";}
else {part1 = "C:/temp/new00000";}
String num = Integer.toString(i);
url[i]= part1 + num + ".jpg";
}
if(picNum<0){picNum=0;}
String ref = url[picNum];*/ //this code is just to get specific ref for image location
BufferedImage loadImg = loadImage(ref);
JImagePanel panel = new JImagePanel(loadImg, 0, 0);
panel.setPreferredSize(new Dimension(800, 600));
return panel;
}
public static class JImagePanel extends JPanel{
private BufferedImage image;
int x, y;
public JImagePanel(BufferedImage image, int x, int y) {
super();
this.image = image;
this.x = x;
this.y = y;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, x, y, null);
}
}
public static BufferedImage loadImage(String ref) {
BufferedImage bimg = null;
try {
bimg = javax.imageio.ImageIO.read(new File(ref));
} catch (Exception e) {
e.printStackTrace();
}
BufferedImage bimg2 = resize(bimg,800,600);
return bimg2;
}
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage dimg = dimg = new BufferedImage(newW, newH, img.getType());
Graphics2D g = dimg.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
g.dispose();
return dimg;
}
}
Et le code qui met à jour mon IUG est, il fonctionne en retirant le panneau de son panneau containg et readding ensuite à ce .
picPanel = imgDisp.imgDisp(num);
repaintPicPanel();
public static void repaintPicPanel()
{
picPanel.removeAll();
menuPanel.remove(picPanel);;
menuPanel.add(picPanel, BorderLayout.LINE_START);
}
Pourriez-vous également mettre en forme le code de la dernière partie de votre code dans lequel vous mettez à jour le panneau contenant? – extraneon