자바 스윙에서 두 개의 스피너를 만들고 싶습니다. 비례가 서로 의존하므로 하나의 스피너 값을 변경하면 두 번째 스피너 값도 변경됩니다. 각 회 전자에 대한 수신기를 작성하면주기가 작성됩니다. SpinnerModel을 사용해 보았지만 각 회 전자마다 다양한 값을 설정하는 방법을 모르겠습니다. 답변 해 주셔서 감사합니다.비례 의존 자바 스윙의 Jspinners
2
A
답변
2
전원을 끄고 켤 수있는 변경 수신기를 쓰지 않는 이유는 무엇입니까? 따라서 한 리스너에서 변경이 감지되면 다른 스피너의 리스너를 끄고 두 번째 모델을 설정 한 후 다시 켜십시오. 예를 들어
,
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TiedSpinnerChangeListeners extends JPanel {
public static final int SPINNER_RATIO = 5;
public static final int SPINNER_1_MAX = 100;
public static final int SPINNER_2_MAX = SPINNER_1_MAX * SPINNER_RATIO;
private JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(0, 0,
SPINNER_1_MAX, 1));
private JSpinner spinner2 = new JSpinner(new SpinnerNumberModel(0, 0,
SPINNER_2_MAX, SPINNER_RATIO));
public TiedSpinnerChangeListeners() {
add(spinner1);
add(spinner2);
TiedSpinnerListener spinnerListener1 = new TiedSpinnerListener(spinner2, false);
TiedSpinnerListener spinnerListener2 = new TiedSpinnerListener(spinner1, true);
spinnerListener1.setSecondSpinnerListener(spinnerListener2);
spinnerListener2.setSecondSpinnerListener(spinnerListener1);
spinner1.addChangeListener(spinnerListener1);
spinner2.addChangeListener(spinnerListener2);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new TiedSpinnerChangeListeners());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class TiedSpinnerListener implements ChangeListener {
private TiedSpinnerListener secondSpinnerListener;
private JSpinner secondSpinner;
private boolean listenerOn = true;
private boolean largerValue;
public TiedSpinnerListener(JSpinner secondSpinner,
boolean largerValue) {
this.secondSpinner = secondSpinner;
this.largerValue = largerValue;
}
@Override
public void stateChanged(ChangeEvent e) {
if (!listenerOn) {
return;
}
secondSpinnerListener.setListenerOn(false);
int value = ((Integer) ((JSpinner) e.getSource()).getValue()).intValue();
int newValue = largerValue ? value
/TiedSpinnerChangeListeners.SPINNER_RATIO : value
* TiedSpinnerChangeListeners.SPINNER_RATIO;
secondSpinner.setValue(newValue);
secondSpinnerListener.setListenerOn(true);
}
public void setSecondSpinnerListener(TiedSpinnerListener secondSpinnerListener) {
this.secondSpinnerListener = secondSpinnerListener;
}
public boolean isListenerOn() {
return listenerOn;
}
public void setListenerOn(boolean listenerOn) {
this.listenerOn = listenerOn;
}
}
+0
대단히 감사합니다 .-) – user3553299
관련 문제
- 1. 자바 스윙의 탭 문제
- 2. 자바 스윙의 MVC 패턴?
- 3. 자바 스윙의 JTextField 인세
- 4. 자바 스윙의 지연 그래픽
- 5. 자바 스윙의 스택 GUI
- 6. 자바 스윙의 작은 대문자?
- 7. 자바 스윙의 Transparant JFrame
- 8. 자바 스윙의 HTML 렌더링
- 9. 자바 스윙의 시간 조절
- 10. 자바 스크립트 - 스윙의 효과
- 11. 자바 스윙의 JButton
- 12. 자바 스윙의 마우스 포인터 문제
- 13. 자바 스윙의 제목 구분 기호
- 14. 자바 스윙의 Epub 파일 리더
- 15. 자바 스윙의 JTree 구성 요소
- 16. 자바 스윙의 스레드가 작동하지 않습니다.
- 17. 자바 스윙의 키보드 "Held"이벤트?
- 18. 자동 자바 스윙의 크기를 조정
- 19. 비례
- 20. 플렉스 비례 비례 조절 폭
- 21. 자바 스윙의 한 줄에 블롭 데이터가 표시됩니다.
- 22. 자바 스윙의 흔들리는 프레임 및 창?
- 23. 자바 스윙의 jbutton (PC 폴더를 통해 탐색)
- 24. 자바 스윙의 체크 박스 간격 조정하기
- 25. '최근에 열림'즉 자바 스윙의 내역 유형 기능
- 26. 스윙의 진정한 투명성
- 27. 스윙의 StackPanel
- 28. 스윙의 jprogressbar
- 29. 스윙의 제한
- 30. 스윙의 페인팅
무한 루프를 방지 스피너의 값이 설정 값과 이벤트를 트리거하기 전에 새로운 값이 이미 유무를 검출한다. – gknicker
끄고 켤 수있는 변경 리스너를 쓰지 않는 이유는 무엇입니까? 따라서 한 리스너에서 변경이 감지되면 다른 스피너의 리스너를 끄고 두 번째 모델을 설정 한 후 다시 켜십시오. –