2012-02-11 3 views
3

나는 JTextArea를 가지고 있고 텍스트가 선택되어 있는지 확인하고 있는데, 아무것도 없다면 메뉴 항목 중 두 개가 회색으로 표시됩니다. 내가 가지고있는 문제는 컴파일하고 응용 프로그램을 열 때 JTextArea를 먼저 클릭 한 다음 메뉴 항목을 회색으로 표시해야합니다. 텍스트가 선택되지 않은 경우에도 그렇지 않은 경우입니다. 다음과 같은 캐럿 수신기를 사용하고 있습니다.JTextArea에서 텍스트 선택 감지하기

textArea.addCaretListener(new CaretListener() { 

     @Override 
     public void caretUpdate(CaretEvent arg0) { 
      int dot = arg0.getDot(); 
      int mark = arg0.getMark(); 
      if (dot == mark) { 

       copy2.setEnabled(false); 
       cut1.setEnabled(false); 
      } 
      else{ 
       cut1.setEnabled(true); 
       copy2.setEnabled(true); 
      } 

     } 
    }); 

답변

5

이러한 메뉴 항목을 만들 때 각각 setEnabled(false)이어야합니다.

+0

이 방법이 더 효과적입니까? (그것은 나에게 끈적 거리는 것처럼 보입니다. 그것은 나일지도 모릅니다.) – orange

+1

@Jeff -이 방법으로 생각해보십시오 : 선택은 메뉴 항목을 활성화하는 긍정적 인 동작입니다. 앱을 시작할 때 선택 항목이 아직 선택되지 않았으므로 해당 항목은 기본 상태 여야합니다. 어떤 장애인입니다. – kdgregory

1

별도의 함수에서 잘라 내기/복사 메뉴 항목에 대한 사용/사용 안함 논리를 정의하고 GUI 초기화 중에 해당 함수를 호출 할 수 있으며 해당 함수는 CaretUpdate (또는 더 나은 MouseReleased) 이벤트에서 호출됩니다.

JTextArea textArea; 
...... 
........ 
public void init() 
{ 
    ...... 
    ........ 
    textArea=new JTextArea(); 
    // add textArea to parent container 
    // now initialize menu items state 
    setEditingMenuItemsState(); 
    textArea.addCaretListener(new CaretListener() 
    { 
     @Override 
     public void caretUpdate(CaretEvent arg0) 
     { 
      setEditingMenuItemsState(); 
     } 
    }); 
    ...... 
    ........ 
} 

public void setEditingMenuItemsState() 
{ 
    String selectedText; 

    if (textArea == null) selectedText = null; 

    if (selectedText == null || selectedText.isEmpty()) 
    { 
     copy2.setEnabled(false); 
     cut1.setEnabled(false); 
    } 

    else 
    { 
     cut1.setEnabled(true); 
     copy2.setEnabled(true); 
    } 
} 
-1

당신은 JtextField.setHighlighter (널)를 사용할 수 있습니다;

+0

은 선택되는 모든 시각적 단서를 제거합니다. – kleopatra