让我描述一下我的情况,
我的 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/