重画后如何获取JFrame进行更新?

时间:2019-05-20 00:33:18

标签: java

我正在使用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能够持续更新自身,但是只有在调整窗口大小时才会这样做。窗口也开始完全缩小,要求我在看到任何东西时立即调整其大小。

0 个答案:

没有答案