나는 12시와 같이 사용자가 시간을 입력하기를 원하지만 몇 가지를 알아 내야하고 나는 사악하다.jtextfield에 콜론을 넣어 제거 할 수 있습니까?
- 텍스트를 5 자로 제한 할 수 있습니까?
- 사용자가 코드를 삭제할 수 없도록 코드에 콜론을 삽입 할 수 있습니까?
- 마지막으로, 내가 그 코드를 가지고 그것 (물론 콜론을 무시)의 숫자 만 있는지 확인할 수 있습니다
나는 12시와 같이 사용자가 시간을 입력하기를 원하지만 몇 가지를 알아 내야하고 나는 사악하다.jtextfield에 콜론을 넣어 제거 할 수 있습니까?
대답은 JFormattedTextField과 MaskFormatter를 사용하는 것입니다. 예를 들어
:
String mask = "##:##";
MaskFormatter timeFormatter = new MaskFormatter(mask);
JFormattedTextField formattedField = new JFormattedTextField(timeFormatter);
자바 컴파일러는 당신이 잡을 또는 않는 MaskFormatter를 만들 때 ParseException가 던져 때문에 반드시 이렇게해야합니다.
나는이 일을 할 수 없었다. 마스크 포맷터와 텍스트 필드는 예외를 throw하기 전에 10 자까지 허용하며 여전히 나를 사용할 수 없습니다. public void textformat() { MaskFormatter mask = null; { 마스크 = 새 MaskFormatter ("## : ##"); mask.setPlaceholderCharacter (':'); } catch (ParseException e) { e.printStackTrace(); } JFormattedTextField sunb = new JFormattedTextField (마스크); jFormattedTextField1 = sunb; } – rdemolish
텍스트 필드를 버리고 두 개의 JSpinner
인스턴스를 콜론이 포함 된 JLabel
(또는 두 개의 JTextField
인스턴스)으로 구분하여 선택하십시오.
이 솔루션이 사용자에게 더 직관적 일지는 확실하지 않지만 그렇게 생각합니다.
오래된 질문에 대한 늦은 대답; DocumentFilter
을 사용하면 그 세 가지를 달성 할 수 있습니다.
비 생산 품질 코드는
String TIME_PATTERN = "^\\d\\d:\\d\\d\\s[AP]M$";
final JTextField tf = new JTextField("00:00 AM", 8);
((AbstractDocument)tf.getDocument()).setDocumentFilter(new DocumentFilter() {
public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a) throws BadLocationException {
String text = fb.getDocument().getText(0, fb.getDocument().getLength());
text = text.substring(0, offs) + str + text.substring(offs + length);
if(text.matches(TIME_PATTERN)) {
super.replace(fb, offs, length, str, a);
return;
}
text = fb.getDocument().getText(0, fb.getDocument().getLength());
if(offs == 2 || offs == 5)
tf.setCaretPosition(++offs);
if(length == 0 && (offs == 0 ||offs == 1 ||offs == 3 ||offs == 4 ||offs == 6))
length = 1;
text = text.substring(0, offs) + str + text.substring(offs + length);
if(!text.matches(TIME_PATTERN))
return;
super.replace(fb, offs, length, str, a);
}
public void insertString(FilterBypass fb, int offs, String str, AttributeSet a) throws BadLocationException { }
public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { }
});
사용 같을 수있다 [JFormattedTextField의 (http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField. html) 및 [MaskFormatter] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html)를 참조하십시오. –