[java] jpanel jako osobny wątek


(Vegossj2) #1

tworzę sobie aplikacje i mam pewien problem. Okienko pokazujące wynik obliczeń graficznie potrzebuje trochę czasu zanim ukarze się obraz. Przycina to trochę program. Czy dałoby się przerzucić ten problem na osobny procesor by reszta programu nie wieszała się przez to?


([alex]) #2

Wystarczy osobny wątek.


(Vegossj2) #3

ale gdzie dokładnie:

  • wątek ma być w klasie głównej i dodawać ten panel;

  • wątek gdzieś w panelu rysującym i ma wykonać metodę paintcomponent

można pokazać na prostym przykładzie gdzie to upchać

public class SmpWindow extends JFrame {

    public SmpWindow() throws IOException

    {

    	getContentPane().setLayout(null);

        JPanel panel= new MyPanel();

        panel.setBounds(0, 0, 400, 300);

    	getContentPane().add(img);

    }

}


class MyPanel extends JPanel {


        public MyPanel (){

            //coś tam

        }


        public void paintComponent(Graphics g) {

            super.paintComponent(g);

            //zawiłe rysowanie

         }

}


public class main {

    public static void main(String[] args) {

        SmpWindow wnd = new SmpWindow();

        wnd.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        wnd.setVisible(true);

        wnd.setBounds( 70, 70, 440, 330);

    }

}

([alex]) #4

Metoda paintComponent z klasy MyPanel rysuje z wcześniej przygotowanej bitmapy.

public class Watek extends Thread {

public void run() {

}

}

W konstruktorze klasy Watek przekazujesz parametry, w metodzie run() rysujesz do bitmapy (nie bezpośrednio na panel), po narysowaniu do bitmapy, podmienia bitmapę w klasie MyPanel, wywołuje repaint(), kasuje samą siebie (wpisuje nula do zmiennej).

Po zmianie parametru/parametrów rysowania, tworzymy obiekt klasy Watek z odpowiednimi parametrami.


(Vegossj2) #5

dziękuję