SWT的SelectionEvent.stateMask不起作用

简介:

通常理解stateMask的作用是标志事件发生时是否有Shift、Ctrl等键同时按下,但SWT里绝大多数Control都不支持这个标志,无论按下什么键,事件对象里的stateMask都是0(不信可以运行下面的代码)。更奇怪的是这个问题已经被提出3年多还没有解决,stateMask只对MenuItem有用,那要怎么实现对Button的Ctrl+Click检测呢?

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class ButtonTest {

 public static void main(String[] args) {
  Display display = new Display();
  Shell shell = new Shell(display);
  shell.setLayout(new GridLayout());
  shell.setSize(200, 200);

  final Button button = new Button(shell, SWT.NONE);
  button.addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent e) {
    System.out.println(e.stateMask);//Always zero
   }
  });
  button.setText("Test");

  shell.open();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch())
    display.sleep();
  }
  display.dispose();
 }
}

本文转自博客园八进制的博客,原文链接:SWT的SelectionEvent.stateMask不起作用,如需转载请自行联系原博主。

相关文章
|
Java
【SWT】常用代码(二)
【SWT】常用代码(二)
146 0
|
Shell API
【SWT】常用代码(三)
【SWT】常用代码(三)
143 0
|
API 数据安全/隐私保护 Android开发
【SWT】常用代码及接口(一)
【SWT】常用代码及接口(一)
201 0
SwiftUI—如何快速打开一个警告窗口
SwiftUI—如何快速打开一个警告窗口
226 0
SwiftUI—如何快速打开一个警告窗口
|
Android开发
eclipse中改变字体大小的快捷键
eclipse中改变字体大小的快捷键
263 0
|
Shell
SWT的GridData中一个需要注意的地方
如果在界面上有一个大文本框,一般我们会指定它的GridData为GridData.FILL_BOTH,这样在窗口改变大小时它的大小会随着变化。但在同一个GridLayout里,如果有多个这样的文本框,一定要注意它们的GridData中的grabExcessHorizontalSpace属性,该属性指出当一行中所有单元格的大小(宽/高)还不足以填充父控件时,是否增大其尺寸。
1466 0
|
前端开发 Android开发
在SWT里显示AWT对象
今天遇到一个问题,就是要在一个Eclipse插件里显示JFreeChart的图形,因为后者是基于Java2D的,要把图形显示在SWT应用程序里需要利用SWT-AWT桥接器来实现,虽说桥接的方式多半会伴随着性能下降,但总归是一个解决方法。
1334 0
|
Shell
SWT的PaintListener
以前很少用到这个类(org.eclipse.swt.events.PaintListener),利用它可以用来在control上画一些东西,基本方法是在control上 addPaintListener()一个PaintListener,然后在这个listener里做具体的画图工作,listener在control需要绘制的时候调用。
1320 0