자바 문자열 필터링 관련 질문있습니다...
벚꽃
이제 자바 공부 시작한지 막 일주일쯤 되는 1人 입니다 !!
다른게 아니라 그냥 공부하는거보다는 먼가를 만들면서 공부를 하는게 좀더 잼있고 효율적인거 같아서 제가 좋아하는 영화 관련
프로그램을 만들고있습니다. 근데 필터링관련된 자료를 찾다가 소스를 하나 구했는데 이게 숫자로 10자리 밖에 안되더라구요...
제가원하는건 한글과 숫자만 가능한폼 하나 영문과 숫자만 가능한 폼하나.... 이렇게 필요한데....제가 구한소스는 아무리
들여다봐도 이 변수가 머고 머가먼지 모르겠더라구요 ㅜㅜ 고수님들 자세히 주석만 달아주셔두 감사하구요....
한글과 숫자만 입력가능한 소스 와 영문과 숫자만 입력가능한 소스를 올려주심 대단히 감사하겠습니다 (__)
아래는 숫자만 10자리 입력가능한 필터 소스입니다.
아 그리고... 이 소스중에 도대체 어디가 10자리만 입력가능하게 설정된건지 .. 알수있을까요....?
============================================== 소스 =================================================
import javax.swing.text.*;
import java.awt.Toolkit;
public class IntegerDocumentFilter extends DocumentFilter { ///////////// 필터처리 클래스
int currentValue = 0;
public IntegerDocumentFilter() {
}
public void insertString(DocumentFilter.FilterBypass fb,
int offset, String string, AttributeSet attr)
throws BadLocationException {
if (string == null) {
return;
} else {
replace(fb, offset, 0, string, attr);
}
}
public void remove(DocumentFilter.FilterBypass fb,
int offset, int length)
throws BadLocationException {
replace(fb, offset, length, , null);
}
public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
Document doc = fb.getDocument();
int currentLength = doc.getLength();
String currentContent = doc.getText(0, currentLength);
String before = currentContent.substring(0, offset);
String after = currentContent.substring(
length+offset, currentLength);
String newValue = before +
(text == null ? : text) + after;
currentValue = checkInput(newValue, offset);
fb.replace(offset, length, text, attrs);
}
private int checkInput(String proposedValue, int offset)
throws BadLocationException {
int newValue = 0;
if (proposedValue.length() 0) {
try {
newValue = Integer.parseInt(proposedValue);
} catch (NumberFormatException e) {
throw new BadLocationException(
proposedValue, offset);
}
}
return newValue;
}
}==============================================================================================================
-
영동교
^^ 죄송은요 열심히 하세요. 저도 아직도 공부중이라~ 더 쉽게 풀이는 못해드렸네요. 자바는 끝이 안나서~
-
앵겨쪼
ㅜㅜ 도무지가..... 그냥 키 리스너로 포문 돌리고 이프문 돌려서 ㅜㅜ 했네요 ㅜㅜ 그래도 한글은 무한정 입력이 되버리는 ㅜㅜ 나중에 고수되면 이부분 해봐야겠어요 ㅜㅜ 아직은 너무 어려운듯.. ㅜㅜ
수다님 신경써주셔서 감사합니다 ㅜㅜ 열심히 말씀해주셨는데... 제가 알아먹질 못하네요 ㅜㅜ
죄송해여 ㅠㅠ -
스릉흔드
.. 재확인 중인데요 replace 메소드에서
int currentLength = doc.getLength(); // 여기부분에서 입력된 원본 문서의 길이를 받고
String currentContent = doc.getText(0, currentLength); // 입력된 문서의 0번째 부터 문서길이까지 문자열로 변환
String before = currentContent.substring(0, offset); // 만약 길이제한이 있다면 offset -
셋삥
수다님 신경써주셔서 감사합니다 +_+ 근데 수다님이 말씀해주신 .. 호출하는부분.... 하~~ 알려면 알수록 힘들어지네요 ㅜㅜ 호출하는부분에도 없네요 ㅜㅜ
document textdocone = movie_date.getdocument();
documentfilter filterone =
new integerdocumentfilter();
((abstractdocument)textdocone).setdocumentfilter(filter -
꽃짱구
ㅜㅜ 수다님 제가 이 소스자체를 이해못해서 그러는데... offset 크기로 자른다는게 무슨뜻인지....ㅜㅜ
자바는 문자열 필터링이 너무 어려운거 같아요 ㅜㅜ 유니코드 블럭을 검색해서 적용시켜봐도 먹지도 않고 ㅜㅜ 자세히 설명좀 부탁 드려도 될까요? -
해련
replace 메소드에서
String before = currentContent.substring(0, offset);
이 부분에서 offset 크기로 자르는거 같네요