powiedzcie co tu zamula

0

Mam w głównej klasie taki fragment kodu:

private JSpinner tlum_spin;
...
  tlum_spin = new JSpinner(new SpinnerNumberModel(20,1,100,1));
     tlum_spin.setToolTipText("Ustaw tłumienie stawianej ściany");
     JComponent editor=tlum_spin.getEditor();
     ((JSpinner.DefaultEditor)editor).getTextField().setEditable(false);

później pobieram z tego wartość w ten sposób:

			public void mousePressed(MouseEvent e)	 
   			{	
   				int button=e.getButton();
   				
   				if(rys==0)	//----punkt--------------------------------------
   				{
   	   				switch(button)
   	   					{
   	   					case MouseEvent.BUTTON1 : 		//wcisnieto lewy przycisk	
   	   						if (jak==1)
   	   							{	pole[level][kolumna][rzad].zmienKolorL();
   	   								space[level][kolumna][rzad]=-(Integer)tlum_spin.getValue();
   	   							}

Jeśli tablica "space" ma rozmiar 3x100*100 to jest to parę sekund, ale już dla tablicy 3x300x300 dosłownie zawiesza to mój program.
Powiedzcie mi proszę w czym rzecz tutaj jest skopana (jak poprawić).

No i ten JSpinner strasznie mi zamula.

0

Brakuje tu istotnego kawałka kodu. Szczególnie reszty metody moussePressed. Być może w metodzie tej przelatujesz wszystkie elementy tablic, co byłoby przyczyną "zamulania". A akurat w niej powinno być jak najmniej rzeczy do zrobienia. Powinny tam być pojedyncze przestawienia zmiennych, a jeżeli potrzeba coś więcej, to trzeba to wydzielić do osobnego wątku jako zadanie.

0

wiem, ze metodę tą należy zamknąć i to oczywiście czynie (inaczej przecież bym tego nie odpalił). Metoda ta jest bardzo długa, ale przy kliknięciu myszy pobieram wartość z JSpinner'a tylko dla kilku elementów tablicy - to akurat nie zamula.
Zamula tylko przestawienie wartości w JSpinnerze. I dzieje się to tylko dla pierwszej zmiany. Później już z tego co pamiętam nie zamula. Powiem więcej: wywalenie tego całego modelu, który on wykorzystuje i w ogóle wszystkich "dodatkowych" linijek z niego nie poprawia sprawy.

Więc problem póki co nie rozwiązany.

1

Sprawę wyjaśniłem:
Problemem jest duża ilość komponentów/kontenerów - tak jak pisałem przy większej ich liczbie czas zamulenia wzrastał. Rozwiązałem to poprzez odpowiednie sterowanie przełączania focusa komponentów-dokładniej zrobieniem własnego FocusTraversalPolicy i ustawieniem tylko jednego komponentu (tego spinner'a, z którym był problem) dla FocusCycleRoot.

http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1