【发布时间】:2016-01-04 00:39:27
【问题描述】:
我试图在一个小项目中使用 Graphics2D 和 Swing 可视化排序算法(不知道这是不是一个好主意,我只是为了好玩),结果我会调用 update 方法并因此调用 paintCompenent每次数组中的元素更改其值时方法。
问题在于,paintComponent 方法显然只在算法完成后才被调用。算法代码如下:
private void sortBubble() {
int n = array.length;
do {
int newn = 1;
for (int i = 0; i < n - 1; i++) {
if (array[i] > array[i + 1]) {
int index = array[i];
array[i] = array[i + 1];
array[i + 1] = index;
System.out.println("SWITCHED");
this.setChanged();
this.notifyObservers();
newn = i + 1;
}
}
n = newn;
} while (n > 1);
}
更新方法的代码:
public void update(Observable o, Object arg) {
if(draw!=null) {
drawPanel.remove(draw);
}
draw = new Plotter(array.array,this.getWidth(),this.getHeight());
drawPanel.add(draw);
drawPanel.validate();
System.out.println("UPDATED");
}
以及JPanel类的代码:
private void draw(Graphics g) {
g2d = (Graphics2D) g;
int i;
for(i=0;i<array.length;i++) {
g2d.draw(new Line2D.Double(i, height, i, height-array[i]));
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
draw(g);
System.out.println("PLOTTED");
}
有没有办法让 JPanel 在每次值更改时实际更新?
【问题讨论】:
标签: java algorithm swing sorting graphics2d