10 (최소), 30, 60 및 100 (최대)의 4 가지 값만 사용하여 JSlider를 만들고 싶습니다. 이 값에만 "스냅"할 수있는 것을 만들 수 있습니까? 그렇다면 예제를 제공해 주시겠습니까? 감사!JSlider의 특정 값에 스냅 할 수 있습니까?
답변
다음 예제는 아마도 사용자가 찾고자하는 것을 수행하는 가장 쉬운 방법 일 것입니다. 기본 JSlider/BasicSliderUI 구현에 문제가 있기 때문에 JSlider 서브 클래스에서 getValue()를 간단히 재정의하여 도메인 별 값을 반환 할 수는 없습니다. 이 예에서는 사용자 정의 getDomainValue()를 정의하여 슬라이더 틱 위치를 기반으로 도메인 특정 값 (10, 30, 60 또는 100)을 반환합니다.
package example.stackoverflow;
import java.util.Hashtable;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SteppingSliderExample
{
public static class SteppingSlider extends JSlider
{
private static final long serialVersionUID = -1195270044097152629L;
private static final Integer[] VALUES = { 10, 30, 60, 100 };
private static final Hashtable<Integer, JLabel> LABELS = new Hashtable<>();
static
{
for(int i = 0; i < VALUES.length; ++i)
{
LABELS.put(i, new JLabel(VALUES[i].toString()));
}
}
public SteppingSlider()
{
super(0, VALUES.length - 1, 0);
setLabelTable(LABELS);
setPaintTicks(true);
setPaintLabels(true);
setSnapToTicks(true);
setMajorTickSpacing(1);
}
public int getDomainValue()
{
return VALUES[getValue()];
}
}
public static void createAndShowGUI()
{
JFrame frame = new JFrame("SteppingSlider");
frame.setSize(500, 120);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final SteppingSlider steppingSlider = new SteppingSlider();
final String labelPrefix = "Slider value: ";
final JLabel output = new JLabel(labelPrefix + steppingSlider.getDomainValue());
steppingSlider.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent evt)
{
output.setText(labelPrefix + steppingSlider.getDomainValue());
}
});
frame.getContentPane().setLayout(
new BoxLayout(frame.getContentPane(),
BoxLayout.Y_AXIS));
frame.getContentPane().add(steppingSlider);
frame.getContentPane().add(output);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
귀하의 예를 찾고 정확히 무엇입니까! 그것을하는 방법을 보여 주셔서 고마워. :) –
getValue() 및 map 등을 오버라이드 (override)하는 JSlider의 서브 클래스를 기술합니다. [1,2,3,4] (원본)부터 [10,30,60,100]까지입니다. 내 마음에 오는 가장 간단한 솔루션.
이것은 매우 위험합니다. 이것은' JSlider' (내부적으로 getValue() 메소드에 접근합니다). – brimborium
- 1. SKNode의 스냅 샷을 생성 할 수 있습니까?
- 2. Jslider의 아이콘을 변경하는 방법이 있습니까?
- 3. JSlider의 버그입니까?
- 4. git 스냅 샷을 마운트 할 수 있습니까?
- 5. JSlider의 라벨에 툴팁
- 6. 특정 그리드 위치로 스냅
- 7. 셀 값에 따라 Excel을 사용하여 특정 태그 값에 대한 html 파일을 구문 분석 할 수 있습니까?
- 8. 어떻게 객체 값에 접근 할 수 있습니까?
- 9. 속성을 설정자의 값에 바인딩 할 수 있습니까?
- 10. Java Swing - JSlider의 마커 그리기
- 11. 값에 따라 ng-grid에서 특정 행을 숨길 수 있습니까?
- 12. 특정 XML 값에 따라 웹 페이지의 요소를 변경할 수 있습니까?
- 13. 사용할 수있는 특정 값에 따라 T-SQL의 특정 값에 액세스
- 14. 가장 가까운 미리 정의 된 위치로 "스냅"할 수 있습니까?
- 15. hdfs 스냅 샷을 사용하여 하이브를 복원 할 수 있습니까
- 16. AMI 스냅 샷을 로컬 시스템에 마운트 할 수 있습니까?
- 17. 스냅 샷 크기보다 작은 영구 디스크를 생성 할 수 있습니까?
- 18. 스냅 샷없이 VirtualBox에서 제거 된 HD를 복원 할 수 있습니까?
- 19. maven이 릴리스 리포지토리의 스냅 샷을 검색하지 못하게 할 수 있습니까?
- 20. 어떻게 WPF 슬라이더를 개별 정수 위치로만 스냅 할 수 있습니까?
- 21. Highstock 탐색기의 극단을 기존 점에 스냅 할 수 있습니까?
- 22. 스냅 샷없이 카산드라 노드를 복구 할 수 있습니까?
- 23. UISnapBehavior를 연속적으로 사용하여 UIView를 스냅 할 수 있습니까?
- 24. SBT 0.13 스냅 샷 패키지는 어디에서 다운로드 할 수 있습니까?
- 25. 특정 임계 값에 도달하면 어떻게 트리거를 실행할 수 있습니까?
- 26. 특정 값에 체크 표시 할 웹 그레이드
- 27. Redis DB, 다른 데이터베이스가 아닌 특정 데이터베이스에 대해 스냅 샷을 활성화 할 수 있습니까?
- 28. QScrollBar 스냅
- 29. 특정 옵션 값에 연결
- 30. 스냅 샷에서 복원 할 수 없습니다.
틱이 일정하지 않게 변경하려는 이유가 있습니까? 10,40,70,100이 (가) 귀하의 필요를 충족시키지 못합니까? – JBuenoJr
가능합니다. 당신은 스테핑을 관리하기 위해'BasicSliderUI'의 값과 구현을 관리하기 위해 커스텀'DefaultBoundedRangeModel'을 필요로 할 것입니다 ... 그곳에 대해서 나는 시도를 멈췄습니다 ... – MadProgrammer