0

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

MouseListener有 3 种方法:mouseDown(...), mouseUp(..), mouseDoubleClick(...)-> 我应该只mouseDown(...)在这种情况下使用 - 仅此而已。

mouseDown(..)方法中,我需要调用实际文本对象引用的方法:"XY".setText("");通过鼠标点击的文本。-> 这我不知何故无法获得。

我希望它以某种方式像一般应用程序一样应用于我将在我的应用程序中使用的MouseListener onMouseClickText任何 SWT 。Text

有谁知道如何做到这一点MouseListener或更好:如何在Text里面获得对现有点击 SWT 的引用MouseListener

这是示例代码:

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

1 回答 1

1

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

在任何情况下,无论您使用 aFocusListener还是MouseListener在 上Text,您都可以获取实际导致事件的小部件。如果是鼠标侦听器,您会收到一个实例,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小部件,它应该可以工作。

于 2012-11-14T11:31:34.023 回答