2016-07-20 1 views
1

문제 : dateSpin 화살표를 클릭하면 회 전자가 일 대신에 연도를 변경합니다. 나는 그것이 단지 사용자가 자신의 입력을 회 전자 필드에 입력 할 수 없도록 변경할 수 있도록 기본값을 만들고 싶습니다.JSpinner 기본값은 일 대신에 연도가 변경됩니다.

import javax.swing.*; 
import javax.swing.event.ChangeListener; 
import java.awt.*; 
import java.util.Calendar; 
import java.util.Date; 

public class Test1 extends JFrame 
{ 

public static void main(String[] args) 
{ 
    Test1 frame1 = new Test1(); 
    frame1.setVisible(true); 
} 

public Test1() 
{ 
    super("Test"); 
    setLayout(new FlowLayout()); 

    setSize(300,300); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 

    JSpinner spinner = new JSpinner(); 
    Date date = new Date(); 
    spinner.setModel(new SpinnerDateModel(date, null, null, Calendar.DAY_OF_MONTH)); 

    JSpinner.DateEditor dateEditor = new JSpinner.DateEditor(spinner, "yyyy/MM/dd"); 

    spinner.setEditor(dateEditor); 

    add(spinner); 

    } 

} 

는 오라클 문서에서이 문제가 언급되어 있지만

주, 몇 가지 모양의 유형과 느낌이 지정된 필드를 무시하고 대신 선택한 나타납니다 분야를 변경하는 것이.

그러나 Java에 능숙하지 않아이 문제를 해결하는 방법을 알지 못합니다.

+1

[MCVE] 또는 [짧은, 자체 포함, 올바른 예] (http://www.sscce.org/)를 더 빨리 게시 할 수 있도록 도와주십시오. –

+0

방금 ​​내가 초점을 맞춘 숫자이기 때문에 Windows LAF & (기본) Metal Look and Feel에서 첫 해가 바뀐 MCVE를 만들었습니다. 하루 동안 화살표가 끝나면 위/아래 버튼이 하루를 바 꾸었습니다. –

+0

그런 식으로 내가 그것을 조작하고 csv 파일로 업로드하면 날짜 레이아웃을 변경해야합니다. 나는 그런 식으로 갈 수 있다고 생각하지만, 아마도 명백한 해결책이있을 것이라고 생각했습니다. 아마 며칠에 집중하고 있을까요? –

답변

2

좋은 해결책은 아니지만 텍스트 필드의 캐럿 위치가 항상 끝에 있는지 확인할 수 있습니다 (회 전자를 편집 할 수 없으므로이 기술을 약간 더 허용 할 수 있습니다).

Metal, Nimbus, Motif, Windows, Windows Classic :
dateEditor.getTextField().setEditable(false); 
dateEditor.getTextField().addCaretListener(new CaretListener() { 
    @Override 
    public void caretUpdate(CaretEvent e) { 
     int pos = dateEditor.getTextField().getDocument().getLength(); 
     if (e.getDot() != pos) { 
      dateEditor.getTextField().setCaretPosition(pos); 
     } 
    } 
}); 

이 는 다음 LAFS를 사용하여 날 위해 일했습니다. (지금 테스트 할 수있는 모든 LaFs입니다.)

+0

그것은 작동합니다! 감사. –