Witam proszę o pomoc.
Piszę program który wczytuję plik wave i rysuje różne analizy sygnału. Stworzyłem m.in. scroll do pozycji , zoom i inne ale mam problem przy wczytywaniu większych plików a które tez powinny byc obsługiwane.
Problem jest w taki że mając bardzo dużą ilość wartości , scroll-e chodzą mi ciężko.
Zmiana wartości scrolla powoduje natychmiastowe (i prawidłowe) wywoływanie metod które przetwarzają dane dla posrednich/niechcianych przeze mnie wartości scrolla.
ActionListener nasłuchuje każdych zmian scrolla.
Np gdy scroll ma wartosci od 0 do 100 i np z pozycji 0 przesuwam do 50, Poruszanie scrollbara powoduje kolejne zmiany np 0,1,2,3,4 ... 49, 50 (nawet jesli nie są kolejne a np 0,5,12,20... 50) i tak to te pośrednie wartości powodują z kazdym razem uruchomienie przetwarzania które trwa dłuższą chwile.
I tu leży problem.
Niechce osiągać tu przyspieszenia przetworzenia danych a zwolnienia utrudnień przesuwania scrolla.
Metoda calculations() która przetwarza dane jest wywolywana nie tylko przez jednego scrolla ale takze przez butony i menu dlatego nie wiem jak i gdzie stworzyć ewentualny watek wrzucenia tych obliczeń w tło - jesli wtedy by to pomogło.
Proszę o pomoc.
class Main {
Display obiektDisplay = new Display();
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { //Note 1
public void run() {
Main obiekt = new Main();
obiekt.initGUI();
}
});
}
initGUI() {
JFrame frame = new JFrame();
...
JScrollBar scrollPos = new JScrollBar(JScrollBar.HORIZONTAL);
scrollPos.setVisibleAmount(0);
...
scrollPos.addAdjustmentListener(this);
...
public void adjustmentValueChanged(AdjustmentEvent evt) {
if (evt.getSource() == scrollPos) {
obiektDisplay.setScrollPos(evt.getValue());
}
}
class Display extends JPanel {
...
public void setScrollPos(int value){
this.pos = value;
calculations();
}
...
}