我正在使用JFrame和JPanel创建排序算法的可视化器。我的可视化工具几乎可以正常工作,但是除非调整窗口大小,否则面板不会更新。
我知道这个问题已被问过多次,每次都是针对特定情况的,而提供的其他解决方案却无效。关闭矿井时提供的重复问题仅与切向相关,不会遇到JFrame无法更新的相同问题。我尝试实现frame.setVisible(true)并调用repaint()和revalidate(),但是它仍然不会更新。
我在下面提供了完整的代码。
import java.awt.Canvas;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class VisMain extends JPanel {
private static final long serialVersionUID = 1L;
private int[] array;
public static void bubble_srt(int array[]) {
int n = array.length;
int k;
for (int m = n; m >= 0; m--) {
for (int i = 0; i < n - 1; i++) {
k = i + 1;
if (array[i] > array[k]) {
swapNumbers(i, k, array);
}
}
}
}
private static void swapNumbers(int i, int j, int[] column) {
int temp;
temp = column[i];
column[i] = column[j];
column[j] = temp;
VisMain set = new VisMain();
set.arraySetter(column);
}
public void arraySetter(int[] list) {
this.array = list;
repaint();
revalidate();
for (int y = 0; y < list.length; y++ )
System.out.print(array[y] + ", ");
System.out.print("\n");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("My Drawing");
int[] input = {49, 73, 58, 104, 33, 15, 34, 50, 42, 99};
VisMain obj = new VisMain();
obj.arraySetter(input);
frame.add(obj);
frame.setSize(800, 800);
frame.setVisible(true);
bubble_srt(input);
}
public void paint(Graphics g) {
for (int i = 0; i < array.length; i++) {
g.drawRect((i + 1) * 30, 100, 25, array[i]);
g.fillRect((i + 1) * 30, 100, 25, array[i]);
}
}
}
我希望Visualizer能够持续更新自身,但是只有在调整窗口大小时才会这样做。窗口也开始完全缩小,要求我在看到任何东西时立即调整其大小。