2012-11-14 2 views
0

내 상황 내가 내 자바 SE SWT 응용 프로그램에서 Text을 SWT 한 뭐죠 조금 설명하자 하자 사용자가 응용 프로그램을 실행하는 동안 생성 된 Text 뭔가 (String)를 작성합니다 말한다. USER가 Text 오브젝트/위젯을 클릭하면이 Text은 (setText("");) itselves를 지울 것입니다 (이전에 일부 String이 작성된 경우).JAVA : SWT 텍스트 +의 MouseListener

MouseListener는 3 가지 방법이 있습니다 mouseDown(...), mouseUp(..), mouseDoubleClick(...) -> 나는이 경우에만 mouseDown(...)을 사용해야합니다 - 아무것도 더 밤은 nescesary을.

mouseDown(..) 메서드에서 나는 실제 텍스트 개체 참조의 메서드를 호출해야합니다 : "XY".setText(""); 마우스로 클릭 한 텍스트. -> 나는 어떻게 든 얻을 수 없었다.

대체로 MouseListener onMouseClickText과 같은 형식으로 사용하고 싶습니다. SWT Text을 내 응용 프로그램에서 사용할 수 있습니다.

아무도 어떻게 이런 일을 할 수 있는지 알고 있지 않습니까? 이상 : 기존 참조를 얻는 방법 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

: 왜 마우스 수신기를 사용하고 싶습니까? 텍스트 필드의 Focus 이벤트를 사용하면 더 좋은 방법으로 할 수 있습니다. 자세한 내용은 javadocs를 참조하십시오. 매우 쉬운 방법입니다. –

+0

예, 일반용으로 할 수 있습니까? 그게 뭔지 아십니까? 모든 SWT Text에 대해 일반 Event/Listener를 가지려면 : Event 중복성없이 Text 위젯/객체에 추가 할 수있는 Event 또는 Listener 선언을 하나만 가져야합니다. ?? –

답변

1

나빈 당신이 포커스 청취자를 사용하기 위해 동일한 텍스트 위젯은 키보드의 탭 이동 (같은 여러 가지 방법을 통해 포커스를받을 수 있기 때문에 훨씬 더 제안으로). 그 사건도 처리하고 싶을 것입니다.

Text에서 FocusListener 또는 MouseListener을 사용하든 관계없이 실제로 이벤트를 유발 한 위젯을 가져올 수 있습니다. 마우스 수신기의 경우 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

네, 덕분에 많이 도와 줬어요 !!! –