2010-02-18 6 views
0

java에서 DocumentListener/DocumentEvent를 사용하여 Windows 명령 프롬프트 또는 유닉스 터미널에서와 같이 JTextField에서 텍스트의 특정 부분을 삭제하지 못하도록하는 방법을 알고 싶습니다. 현재 작업 디렉토리와 과거를 삭제할 수 없습니다> 또는 $JTextField DocumentListener/DocumentEvent

아무도 도와 줄 수 있습니까? 덕분에

+0

: 내가 아는 가장 쉬운 방법은 문서 하위 클래스 문서을 제거 무시하고 아래에있는 내 예에서와 같이 문서를 사용하여 텍스트 필드를 설정하는 것입니다 너는 그걸 할 필요가 있니? JLabel을 가질 수없고 그 옆에 JTextField가 있습니까? 이름 : ______ – sateesh

+0

내가 궁금해서 JTextField에서 수행하는 방법을 알고 싶습니다. 그런 식으로하고 싶다면 여기에 질문하지 않을 것입니다. 그래도 감사합니다. –

답변

3

DocumentListener에서 추가 기능을 사용하는 경우의 문제점은 수신기에서 삭제되거나 편집 된 부분을 다시 태 클할 수 없다는 것입니다. 그렇지 않으면 예외를 수정하려고한다는 예외가 발생합니다. 알림을 받으면 왜 것 알고 그냥 궁금

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DefaultStyledDocument; 

public class Application { 

    private static final String PREFIX = "Your Input>"; 

    private static final int prefixLength = PREFIX.length(); 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     JFrame rootFrame = new JFrame(); 
     JTextField textField = new JTextField(new PromptDocument(), PREFIX, 20); 

     rootFrame.add(textField); 
     rootFrame.pack(); 
     rootFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     rootFrame.setVisible(true); 
    } 

    private static class PromptDocument extends DefaultStyledDocument { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public void remove(int offs, int len) throws BadLocationException { 
      if (offs > prefixLength - 1) { 
       int buffer = offs - prefixLength; 
       if (buffer < 0) { 
        len = buffer; 
       } 
       super.remove(offs, len);  
      } 
     } 
    } 
} 
+0

정확히 내가 뭘 원하는지 작동합니다, 그걸 주셔서 감사합니다 :) –

+0

어떻게 내가 현재 경로가 변경 될 것입니다보고 프리 픽스를 변경합니다. –

+0

사용자 지정 문서가 프롬프트의 내용과 길이를 추적 할 수 있도록이를 변경해야합니다. 또한 사용자 지정 문서에 프롬프트를 변경하고 프롬프트 후에 내용을 가져 오는 메서드를 추가 할 것입니다. 프롬프트를 설정하는 방법은 사용자 정의 문서로 덮어 쓰기 때문에 프롬프트를 변경하기 위해 super의 메소드를 사용해야합니다. 나는 이미 http://www.box.net/shared/jjbzrz8fqe에 예제를 썼다. – Klarth

관련 문제