홈>
JSpinner에 대한 custome 모델을 만들려고 이미 시도했지만 작동하지 않습니다. 코드는 다음과 같습니다.
public class ModelJSpinner implements SpinnerModel
{
private long value;
private long min;
private long max;
private long increment;
private ChangeListener l;
private ArrayList<ChangeListener> listeners;
@Override
public Object getValue()
{
return null;
}
public ModelJSpinner(long min, long max, long increment)
{
super();
this.min = min;
this.max = max;
this.increment = increment;
setValue(min);
listeners = new ArrayList<>();
}
@Override
public void setValue(Object value)
{
if (value == null)
{
}else {
this.value = (Long) value;
}
//fireStateChanged();
}
private void fireStateChanged()
{
if (listeners == null)
return;
for (int a = 0; a < listeners.size(); a++)
{
ChangeListener l = (ChangeListener) listeners.get(a);
try
{
l.stateChanged(new ChangeEvent(this));
}
catch (RuntimeException e)
{
e.printStackTrace();
}
}
}
@Override
public Object getNextValue()
{
Long nextValue = value + increment;
if (nextValue > max)
{
return null;
}
else
{
return nextValue;
}
}
@Override
public Object getPreviousValue()
{
Long previousValue = value - increment;
if (previousValue < min)
{
return null;
}
else
{
return previousValue;
}
}
@Override
public void addChangeListener(javax.swing.event.ChangeListener l)
{
this.l = l;
listeners.add(l);
}
@Override
public void removeChangeListener(javax.swing.event.ChangeListener l)
{
if (this.l == l)
{
l = null;
}
listeners.add(l);
}
}
그러나 다음 코드를 실행할 때 ... 많이하지 않는 JSpinner를 제외하고는 아무것도 얻지 못합니다 ...
public class Test
{
public static void main(String[] args)
{
ModelJSpinner model = new ModelJSpinner(10L, 20L, 5L);
JSpinner spinner = new JSpinner(model);
spinner.setModel(model);
spinner.setValue(15L);
JFrame frame = new JFrame("adasasd");
frame.setSize(350, 150);
frame.add(spinner);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
처음에 JSpinner가 위에서 언급 한 모델로 무언가를 할 수 있다는 것을 알고 싶었고 나중에 Changelisteners를 구현하고 싶었습니다.
현재로서는 제대로 그릴 수조차 없습니다. 누군가 나를 도울 수있는 기회가 있습니까?
JSpinner의 모델로 SpinnerModel을 구현하는 클래스의 인스턴스를 사용해야하며 작동시킬 수 없습니다.
BR DK
- 답변 # 1
관련 질문
- java : 구성 요소는 jlayeredComponent가 앞쪽 레이어로 이동하면 원산지로 돌아갑니다.
- java : 스윙 창은 x 시간 후에 값을 반환하지 않습니다.
- java : jdialog setvisible (false) vs dispose ()
- 루프가 예상대로 작동하지 않는 동안 Java 중첩
- java에서 동일한 점수로 다시 연주하십시오
- java : jframe.setExtendedState는 실제로 최대화되지 않습니다
- java : 왜 내 눈금을 Gridlayout jpanel에 버튼을 추가 할 수 없습니까?
- JList에서 선택한 방법을 선택하고 Java에서 선택한 내용을 변경합니까?
- java : 자바에서 새 줄을 추가하는 방법
- java : WindowBuilder UI를 고정합니다
이것은 실패를 보증합니다 :
이것은 JSpinner가 표시 할 값을 결정하기 위해 사용하는 방법이기 때문입니다.
대신
value
가 보유한 값을 반환하십시오. 들. 또한null
를 반환하지 마십시오getNextValue()
를 위해 다음 값이 최대 값보다 큰 경우 대신 최대 값을 반환하십시오.getPreviousValue()
와 마찬가지로 계산 된 이전 값이 최소값보다 작은 경우 최소값을 반환합니다.예를 들어
추상 모델 클래스를 사용할 수있는 경우 (또는 기본 모델 클래스가 더 우수하지만 스피너 모델에 사용할 수없는 경우) 추상 모델 클래스 확장을 사용하는 것이 좋습니다. 그래도 더 좋습니다 :