提问者:小点点

JAVA:SWT文本鼠标监听器


让我描述一下我的情况,我有SWTText在我的JavaSESWT应用程序中:假设用户将在应用程序运行时向创建的Text写入一些内容(String)。我想介绍一些MouseListener,它会做到这一点:当用户单击Text对象/小部件时,这个Text会自行清除(setText("");)(如果以前写过一些字符串)。

MouseListener有3种方法:mouseDown(…)mouseUp(…)mouseDoubleClick(…)-

mouseDown(…)方法中,我需要调用实际Text对象引用的方法:"XY". setText("");鼠标点击进入的文本。-

我想以某种方式让它像通用MouseListener onMouseClickText一样,它可以应用于我将在我的应用程序中使用的任何SWTText

有人知道如何执行这样的MouseListener或更好的操作吗:如何在MouseListener中获取对现有单击的SWTText的引用?

这是示例代码:

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()");
  }
 };
}

共1个答案

匿名用户

正如Naveen建议的那样,使用焦点侦听器要好得多,因为同一个文本小部件可以通过多种不同的方式(如键盘上的选项卡)接收焦点。你可能也想处理这种情况。

在任何情况下,无论您在Text上使用Focus usListener还是MouseListener,您都可以获取实际导致事件的小部件。在鼠标侦听器的情况下,您会收到MouseEvent的实例,并且您可以使用MouseEvent#widget访问Text控件。您的代码在侦听器实现中如下所示:

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

您可以将相同的侦听器实例添加到多个Text小部件,它应该可以工作。