Récemment, j'ai travaillé sur un programme qui peint une zone avec des carrés de couleur vides. Leurs emplacements sur l'écran sont basés sur les valeurs 1 et 2 dans un fichier texte. Les 1 sont censés faire des boîtes rouges et les 2 sont censés faire des boîtes vertes. Cependant, lorsque je lance le programme, seules les cases rouges sont peintes. J'ai fait quelques tests et j'ai découvert que la méthode repaint est appelée seulement deux fois (parfois pour une raison quelconque), même s'il y a près de 300 valeurs dans le fichier, et repaint()
devrait être appelée une fois pour chaque valeur. Voici mon code:Repaint() ne s'appelle pas
public class MAP extends JFrame {
public static void main(String[] args) throws IOException {
MAP map = new MAP();
}
Shape shape;
int x = -32;
int y = 0;
ArrayList<Shape> shapes = new ArrayList<Shape>();
Graphics2D g2;
Color coulor = null;
private class PaintSurface extends JComponent {
public PaintSurface() {
}
public void paint(Graphics g) {
g2 = (Graphics2D) g;
g2.setColor(coulor);
for (Shape s : shapes) {
g2.draw(s);
}
}
}
public MAP() throws FileNotFoundException, IOException {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
frame.setTitle("Grid Maker");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.add(new PaintSurface(), BorderLayout.CENTER);
frame.setVisible(true);
readNextLine();
}
private void readNextLine() throws IOException {
File file = new File("map.txt");
BufferedReader in = new BufferedReader(new FileReader(file));
String line = in.readLine();
while (line != null) {
for (int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
if (c == '1') {
coulor = Color.RED;
x += 32;
int smallX = x/32;
int smallY = y/32;
shape = new Rectangle2D.Float(x, y, 32, 32);
shapes.add(shape);
repaint();
} else if (c == '2') {
coulor = Color.GREEN;
x += 32;
int smallX = x/32;
int smallY = y/32;
shape = new Rectangle2D.Float(x, y, 32, 32);
shapes.add(shape);
repaint();
}
}
line = in.readLine();
x = -32;
y += 32;
}
}
}
Pourquoi ce code ne fonctionne-t-il pas correctement?
Ne JAMAIS JAMAIS donner de nom à une classe dans ALLCAPS. "Carte" est beaucoup plus facile à lire – supersam654
@ supersam654. Désolé pour ça. Je pense que j'ai trouvé le nom de la classe dans un livre que je lisais. – KrisC
que contient votre fichier d'entrée? – Raufio