1
我試圖創建一種通過使用line2d/graphics2d創建「條形圖」形式來可視化arraysorting的方法。這個想法是在x軸上有數組索引,然後在y上使用不同的排序方法並更新它。所以我試圖使用arrayList來存儲y值,然後在paint方法中使用for循環來繪製所有行,但似乎每當我嘗試並使用repaint重置我的arrayList時,我該如何執行此操作?使用arrayList作爲graphics2d中的y座標
下面是我使用的代碼:
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;
}
}
}
'「每當我嘗試使用重繪它重置我的ArrayList ......」「 - 請告訴更多的究竟發生了什麼事的細節。 「重置我的數組列表」是什麼意思? –
對不起。當我使用graphics2d內置的repaint/paint方法時,它似乎將我的arrayList大小設置爲零/清除數組列表。我試過使用斷點,似乎我的屏幕類中的arrayList的大小正確,直到我調用paint()或repaint(),這意味着如果我在這些方法期間中斷數組列表大小爲0.希望清除它! – Walrusser
這些信息太重要了,無法評論。請[編輯]您的原始帖子,並將其包含在內以供所有人查看。 –