Witam
W komponencie jSpinner mam limit np. 30, chciałbym aby przy takiej wartości próba zwiększenia skutkowała jakaś tam akcją. Druga sprawa jak zablokować możliwość edycji jSpinnera z klawiatury ?
Z góry dzięki za odpowiedzi, pozdro :)
Ok znalazłem rozwiązanie na pierwszy task :)
deklaruję sobie zmienną globalną wartoscSpinnera, a po initComponents wpisuję do niej aktualną wartość Spinnera
i ustawiam sobie listenera
private void jSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {
int value=Integer.parseInt(jSpinner.getValue().toString());
if(value>wartoscSpinnera)
{System.out.println("rosnie");}
else if(value < wartoscSpinnera)
{System.out.println("maleje");}
wartoscSpinnera=value;
}
ups jednak to nie działa tak do końca bo jeśli mam powiedzmy 1 i próbuję zmniejszyć jego wartosc to wtedy jSpinnerStateChanged nie jest wywoływany i wykrycie przekroczenia zakresu nie jest możliwe ; )
jSpinner ma coś takiego jak SpinnerNumberModel.
Dokumentację i przykład masz tu:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/SpinnerNumberModel.html
edit, jednak nie ma tam jak spiąć model ze spinnerem, pełen przykład:
int min = 0;
int max = 100;
int step = 5;
int initValue = 50;
SpinnerModel model = new SpinnerNumberModel(initValue, min, max, step);
JSpinner spinner = new JSpinner(model);
Z klawiaturą nie wiem, ale po co Ci to? Podejrzewam, że do tego, żeby zablokować możliwość wpisywania głupot? Jeśli tylko po to, to chyba lepiej wyłapywać głupoty wpisane w warunek, tam gdzieś jest rzucany: IllegalArgumentException, wystarczy go obsłużyć.
No tak klawiaturę można obsłużyć dodając warunki przy KeyTyped więc to rzeczywiście nie jest problem, cały czas nie wiem jak rozwiązać ten pierwszy problem bo byłby to fajny feature :)
Edycje możesz zablokować tak
JComponent editor=spinner.getEditor();
((JSpinner.DefaultEditor)editor).getTextField().setEditable(false);