2012-11-14 57 views
0

讓我形容一點什麼我的情況,我 SWT已經在我的Java SE SWT應用程序Text: 讓的說用戶會寫東西(String)到創建Text而應用的運行。我想介紹一些MouseListener,它可以做到這一點: 當USER點擊進入Text對象/控件時,這個Text會自己清除(setText("");)它自己(如果先前寫了一些字符串)。JAVA:SWT文字+的MouseListener

MouseListener有3種方法:mouseDown(...)mouseUp(..)mouseDoubleClick(...) - >我應該在這個情況下,只有mouseDown(...)使用 - 僅此而已心不是nescesary。

mouseDown(..)方法我需要調用實際文本對象引用的方法:"XY".setText("");被鼠標點擊的文本。 - >我以某種方式無法獲得。

我想以某種方式像它一般MouseListener onMouseClickText它可以適用於任何SWT Text我將在我的應用程序中使用。

是否有人知道如何做MouseListener或更好:如何獲得此參考SWT TextMouseListener

這裏是示例代碼:

package sk.tokra.example; 

//imports here 
. 
. 
import org.eclipse.swt.widgets.Text; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
. 
. 

public class Application { 

//class fields 
Text text; 
private static final Logger logger = LoggerFactory.getLogger(Application.class); 
. 
. 
. 

// main 
public static void main(String[] args) { 
    logger.debug("main(), Starting app!"); 
    try { 
    Application window = new Application(); 
    window.open(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    logger.debug("main(), Exiting app!"); 
    return; 
} 

/** 
    * Open the window. 
    */ 
public void open() { 
    logger.debug("open()"); 
    Display display = Display.getDefault(); 
    createContents(); 
    shell.open(); 
    shell.layout(); 
    while (!shell.isDisposed()) { 
    if (!display.readAndDispatch()) { 
    display.sleep(); 
    } 
    } 
} 

/** 
    * Create contents of the window. 
    */ 
protected void createContents() { 
    text = new Text(shell, SWT.BORDER); 
    text.addMouseListener(onMouseClickText); 
    . 
    . 
    . 
} 

//other stuff/methods/listener part 
private MouseListener onMouseClickText = new MouseListener() { 
    @Override 
    public void mouseUp(MouseEvent arg0) { 
    logger.debug("onMouseClickFind, mouseUp()"); 
    } 

    @Override 
    public void mouseDown(MouseEvent arg0) { 
    logger.debug("onMouseClickFind, mouseDown()"); 
    // HERE I WOULD NEED to obtain refence of Text 
    // then call .setText(""); 
    } 

    @Override 
    public void mouseDoubleClick(MouseEvent arg0) { 
    logger.debug("onMouseClickFind, mouseDoubleClick()"); 
    } 
}; 
} 
+0

:爲什麼要使用鼠標偵聽器來做到這一點。您可以通過使用Textfield的Focus事件以更好的方式實現它。查看javadoc的細節。它非常容易這樣。 –

+0

是的,但一般情況下可以這樣做嗎?你知道這是什麼嗎?對於任何SWT文本,要具有一般的事件/監聽器:只有一個事件或監聽器聲明,不管代碼是否重複,都可以添加到任何文本小部件/對象中。 ?? –

回答

1

由於納文認爲它是更好的給你用的焦點偵聽器,因爲相同的文本組件可以通過許多不同的方式接收焦點(如Tab鍵鍵盤上)。你可能也想處理這種情況。

在任何情況下,無論您在Text上使用FocusListenerMouseListener,都可以獲取實際導致該事件的小部件。在鼠標監聽器的情況下,您會收到MouseEvent的實例,您可以使用MouseEvent#widget訪問文本控件。你的代碼看起來像下面的監聽器實現:

//other stuff/methods/listener part 
private MouseListener onMouseClickText = new MouseListener() { 
    @Override 
    public void mouseUp(MouseEvent arg0) { 
    ((Text) arg0.widget).setText(""); 
    } 
... 
} 

您可以將相同的偵聽器實例添加到多個Text窗口小部件,它應該工作。

+0

是的,謝謝這幫了我很多! –