J'essaye de créer un moyen de visualiser l'array array en créant une forme de "bargraphe" en utilisant line2d/graphics2d. L'idée est d'avoir l'index du tableau sur l'axe des x, puis d'avoir la valeur sur le y et de le mettre à jour en utilisant différentes méthodes de tri. J'essaye donc d'utiliser une arrayList pour stocker les valeurs de y et d'utiliser une boucle for dans la méthode paint pour dessiner toutes les lignes, mais il semble que chaque fois que j'essaye d'utiliser repaint, elle redéfinit ma arrayList, alors comment faire? ?Utilisation d'une arrayList comme coordonnée y dans graphics2d
Voici le code que je utilise:
import javax.swing.*;
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.Random;
public class Frame_Main extends JFrame {
private JPanel screen = new Screen();
private Screen _screen = new Screen();
private int rndMaxRange = 100;
private int maxArraySize = 50;
// TODO Make sure static is really needed
public static ArrayList<Integer> array = new ArrayList<>();
public Frame_Main() {
this.setSize(700, 500);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.add(screen);
}
public static void main(String[] args) {
Frame_Main m = new Frame_Main();
m.randomizeArray(array);
m.refreshVisuals(array);
}
public void refreshVisuals(ArrayList<Integer> arrayList) {
_screen.setArrayList(arrayList);
_screen.repaint();
System.out.println("Refreshed drawing. Screen Array Size: " + _screen.lineArrayList.size());
}
public void randomizeArray(ArrayList<Integer> arrayList) {
arrayList.clear();
Random rnd = new Random();
for (int i = 0; i < maxArraySize; i++) {
arrayList.add(rnd.nextInt(rndMaxRange) + 1);
}
System.out.println("Created an array with the size: " + arrayList.size());
}
}
class Screen extends JPanel {
public ArrayList<Integer> lineArrayList = new ArrayList<>();
// private int canvasWidth = Frame_Main.WIDTH;
private int lineWidth;
public void setArrayList(ArrayList<Integer> arrayList) {
lineArrayList.addAll(arrayList);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
lineWidth = 3;
g2.setStroke(new BasicStroke(lineWidth));
System.out.println("lineArrayList Size: " + lineArrayList.size());
int x = 0;
for (int i : lineArrayList) {
g2.draw(new Line2D.Float(x, x, 0, i));
x = x + lineWidth;
}
}
}
' « chaque fois que j'essaie d'utiliser repeindre remet à zéro mon arrayList ... »' - dire plus s'il vous plaît des détails de exactement ce qui se passe. Que voulez-vous dire par "réinitialise mon arraylist"? –
Ouais désolé. Quand j'utilise la méthode repaint/paint intégrée dans graphics2d, il semble que ma taille arrayList soit nulle/efface l'arraylist. J'ai essayé d'utiliser des points d'arrêt et il semble que ma arrayList dans la classe screen soit correctement dimensionnée jusqu'à ce que j'appelle paint() ou repaint() ce qui signifie que si je casse pendant ces méthodes, la taille arrayList est 0. Espérons que cela effacera! – Walrusser
Cette information est trop importante pour enterrer dans le commentaire. S'il vous plaît [modifier] votre message original et l'inclure pour tout voir. –