Перерисовка JPanel

245
05 апреля 2017, 14:05

Добрый день! Возникла проблема... Не получаеться перерисовать содержимое панели, которая является вкладкой в tabbedPane. Если во время процесса сортиоовки переключиться на другую вкладку, а потом снова вернуться к данной сортировке, то содержимое панели перерисовывается.

Работа на тему визуализации процесса сортировки.

public class Bubble_sort_panel extends JPanel implements Runnable {
Thread thread;
boolean now_sort = false;
public Bubble_sort_panel() {
}
public void bubble_sort() throws InterruptedException {
    now_sort = true;
    thread = new Thread(this);
    thread.start();
}
@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    for (int i = 0; i < Constant.getN(); i++) {               // активные прямоугольники выделить другим цветом
        if (i == Variable.getIndex_of_spaw_element_bubble() || i == Variable.getIndex_of_spaw_element_bubble()+1) {
            g2.setColor(Constant.getColorOfActyveRectangle());
            g2.fill(rectangle_array_for_bubble[i]);
        }
        else {
            g2.setColor(Constant.getColorOfRectangle());
            g2.fill(rectangle_array_for_bubble[i]);
        }
    }
}
@Override
public void run() {
    while (now_sort) {
        try {
            for (int i = array_for_bubble.length - 1; i >= 0; i--) {
                for (int j = 0; j < i; j++) {
                    if (array_for_bubble[j] > array_for_bubble[j + 1]) {
                        Variable.setIndex_of_spaw_element_bubble(j);
                        /*
                             // вызвать перерисовку
                         */
                        Thread.sleep(1000);
                        int t = array_for_bubble[j];
                        double posX = rectangle_array_for_bubble[j].getX();
                        array_for_bubble[j] = array_for_bubble[j + 1];
                        rectangle_array_for_bubble[j].setFrame(rectangle_array_for_bubble[j+1].getX() , rectangle_array_for_bubble[j].getY(), rectangle_array_for_bubble[j].getWidth() , rectangle_array_for_bubble[j].getHeight());
                        array_for_bubble[j + 1] = t;
                        rectangle_array_for_bubble[j+1].setFrame(posX, rectangle_array_for_bubble[j+1].getY(), rectangle_array_for_bubble[j+1].getWidth(), rectangle_array_for_bubble[j+1].getHeight());
                        Rectangle2D r = rectangle_array_for_bubble[j];
                        rectangle_array_for_bubble[j] = rectangle_array_for_bubble[j + 1];
                        rectangle_array_for_bubble[j + 1] = r;
                    }
                }
            }
            now_sort = false;
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    if (!now_sort) {
        thread.interrupt();
    }
}

}

Answer 1

Могу ошибаться, но должен помочь обычный repaint().

READ ALSO
Добавить картинку и еще кое что в Vuforia

Добавить картинку и еще кое что в Vuforia

Всем приветЯ хочу сделать такую прогу: Чтобы при наведении на объект или qr метку, показывала интерфейс с данными об объекте

276
Как обновить содержимое фрагмента в viewpager?

Как обновить содержимое фрагмента в viewpager?

У меня 2 фрагмента в viewpagerВо фрагментах recycleview

291
Как выгрузить файл с помощью AndroidDevice Monitor?

Как выгрузить файл с помощью AndroidDevice Monitor?

Выгружаю файл из виртус-ва в GenyMotion

371