2012-02-11 98 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 2012-02-11 18:15:43

+1

@Jeff - 想想這樣:選擇是一個積極的行動,使菜單項。當您啓動應用程序時,尚未進行選擇,因此這些項目應處於默認狀態。哪些是禁用的。 – kdgregory 2012-02-11 18:29:08

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(NULL);

+0

這將刪除所有被選中的視覺線索。 – kleopatra 2013-01-24 12:41:06