JAVA:SWT文本+鼠标监听器

标签 java swt mouselistener settext

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

MouseListener 有 3 个方法:mouseDown(...)mouseUp(..)mouseDoubleClick(... ) -> 在这种情况下我应该只使用mouseDown(...) - 没有更多的必要了。

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

我希望它像一般的 MouseListener onMouseClickText 一样,可以应用于我将在我的应用程序中使用的任何 SWT Text

有谁知道如何做到这样的 MouseListener 或更好:如何在 MouseListener 内获取对现有单击的 SWT Text 的引用?

这里是示例代码:

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

最佳答案

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

无论如何,无论您在 Text 上使用 FocusListener 还是 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 小部件,它应该可以工作。

关于JAVA:SWT文本+鼠标监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377612/

相关文章:

java - 如何将 html 图像添加到 velocity 模板文件中以发送电子邮件?

java - 某些文本中出现 "&"时 Apache Batik 转码异常

java - 如何定义表格的垂直对齐方式

java - 如何从圆列表中选择圆以从 JFrame 中删除?

java - 单击时更改 JButton 颜色,未单击后重置

java - 如何根据鼠标指针从JLabel中获取部分文本

java - JPA:两个实体之间存在多个多对多关系?

java - 将二维数组乘以一维数组

java - Canvas 太小,无法在 SWT 中显示图像

java - 如何将图像对齐到表格单元格的中心(SWT 表格)