Problème rafraichissement de l'écran avec un scrollbar en JAVA

Signaler
Messages postés
11
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
27 février 2010
-
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
-
bonjour, voila je suis débutant en JAVA. j'ai programmé un editeur de carte pour un jeu que je ferais par la suite.
Mon éditeur se sert de petites images(25*25) pour remplir la map qui est donc composé de beaucoup de petit panel.
Cela fonctionne tres bien lorsque j'ajoute des choses sur ma map jusqu'au moment où je clic sur la barre de défilement
( oui car ma map est tres longue ), le probleme est qu'a chaque fois que je clic sur cette "scrollbar" tout les petites
images composant la map deviennent toutes petites, elles rétrecissent.
Quelqu'un pourrait me dire quel est le problème ?

3 réponses

Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
C'est pas facile de t'aider sans voir ton code. Essaie une fois cet exemple:
import java.awt.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
public class Testing extends JFrame {
    private final List<List<MyIcon>> map;
    public Testing() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(1000, 500);
        setLocationRelativeTo(null);
        map = new ArrayList<List<MyIcon>>();
        for (int i = 0; i < 25; i++) {
            List<MyIcon> iconList = new ArrayList<MyIcon>();
            for (int j = 0; j < 25; j++) {
                iconList.add(new MyIcon());
            }
            map.add(iconList);
        }
        JPanel panel = new JPanel(new GridLayout(0, 25));
        for (List<MyIcon> list : map) {
            for (MyIcon myIcon : list) {
                JLabel carte = new JLabel(myIcon);
                panel.add(carte);
            }
        }
        add(new JScrollPane(panel));
    }
    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Testing().setVisible(true);
            }
        });
    }
}
class MyIcon implements Icon {
    private final Color color;
    public MyIcon() {
        final Random r = new Random();
        color = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
    }
    public void paintIcon(final Component c, final Graphics g,
            final int x, final int y) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(color);
        g.fillOval(x + 2, y + 2, getIconWidth() - 4, getIconHeight() - 4);
    }
    public int getIconWidth() {
        return 32;
    }
    public int getIconHeight() {
        return 64;
    }
}
Messages postés
11
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
27 février 2010

Bonjour merci pour ta réponse mais je pense que cela ne vient pas du code, car (étant sur mac) je l'ai tester chez un ami sur windows tout marche tres bien.Donc je ne sais pas du tout d'où pourrait pas venir le probleme, quelqu'un aurait une idée ?
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
> je pense que cela ne vient pas du code

As-tu essayer mon code? S'il fonctionne, nous avons une chance de trouver quand même une solution dans ton code!