2011-08-12 4 views

답변

2

Editfieldpaint(..)을 덮어 쓰는 것만으로 가능하다고 생각합니다. 다음 단계에 따라 원하는 동작을 얻을 수 있습니다.

  • 원본 텍스트를 로컬 변수에 저장하십시오.
  • 포커스 상태, 원본 텍스트 등에 따라 가짜 텍스트를 생성합니다.
  • super.paint(..)으로 전화하면 가짜 텍스트로 필드가 페인트됩니다.
  • setText(..)을 사용하면 원본 텍스트를 원래대로 되돌릴 수 있습니다.


초안 구현 : 코드 위

class MyEditField extends EditField { 
    private final static String INIT_TEXT = "Enter Password"; 

    protected void paint(Graphics graphics) { 
     String originalText = getText(); 
     String fakeText = originalText; 

     if (originalText.equalsIgnoreCase("")) { 
      fakeText = isFocus() ? originalText : INIT_TEXT; 
     } else { 
      fakeText = ""; 
      for (int i=0;i<originalText.length();i++) { 
       fakeText += '*'; 
      } 
     } 

     setText(fakeText); 
     super.paint(graphics);   
     setText(originalText); 
    } 
} 


테두리 페인트하지 않습니다.


의견에서 언급 한 문제에 대한 흑백 글꼴을 설정해야합니다. 다음은 샘플 코드입니다.

MyEditField me = new MyEditField(); 

try { 
    Font font = null; 
    FontFamily fontFamily[] = FontFamily.getFontFamilies(); 
    for (int i=0;i<fontFamily.length; i++) { 
     if (fontFamily[i].getName().equalsIgnoreCase("Courier New")) { 
     font = fontFamily[i].getFont(FontFamily.SCALABLE_FONT, 
          Font.getDefault().getHeight()); 
     me.setFont(font); 
     break; 
    } 
    } 
} catch (Exception e) { 
} 
+0

코드에서 솔루션을 얻었지만 패스워드에 숫자를 넣으면 : 1245678921 (무언가), 커서와 문자 사이에 공간이 생겼습니다. 한 번 확인하십시오. – alishaik786

+0

이 문제를 해결하는 방법을 모르십시오. 그러나이 문제가 발생하는 이유는 없습니다. EditField가 'getAdvance (..)'를 사용하여 텍스트 너비를 계산하면 원래 텍스트에 대한 결과가 반환됩니다. 흑백 글꼴 (고정 너비)을 사용하지 않으면이 문제가 발생합니다. 그래서이 문제를 없애려면 그 필드에 단색 글꼴을 설정해야합니다. 나는 이것에 대한 답을 편집했다. 봐. – Rupak

+0

이전 메모의 두 번째 줄에 "알아보기"(오타)로 "아니요"를 읽으십시오. 감사. – Rupak

1

내가 제대로 이해하면, 당신은 PasswordEditField를 사용해야합니다.

LabelField와 마찬가지로 구현하면 필요한 작업을 수행 할 수 있습니다.


배경 텍스트를 원한다는 것을 알았습니다. paint() 메소드 내에서 drawText()를 사용하여 그릴 수 있습니다. EditField를 사용하여 전체 구현을 보여주는 다른 대답도 좋습니다.

+0

나는 내 질문을 분명히 이해하지 못한다고 생각합니다. – alishaik786

+0

PasswordEditField는 원하는 것을 정확히 수행합니다. 왜 바퀴를 재발견합니까? –

관련 문제