八进制

少年壮志无烟抽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  229 随笔 :: 0 文章 :: 2902 评论 :: 10 Trackbacks

通常理解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(
200200);

  
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();
 }
}
posted on 2007-08-28 22:12 八进制 阅读(1968) 评论(3)  编辑 收藏 所属分类: Eclipse

评论

#1楼  2007-09-13 19:08 Pande      
listen mouse event
  回复  引用  查看    

这样是可以的。(Eclipse 3.3M6下测试)

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
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.addListener(SWT.MouseEnter, new Listener(){

public void handleEvent(Event event) {
System.out.println(event.stateMask);

}});
button.setText("Test");

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
  回复  引用  查看    

可以向button添加鼠标事件,Eclipse3.2测试
button.addMouseListener(new MouseListener(){

public void mouseDoubleClick(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println(e.stateMask+"----down");
}

public void mouseUp(MouseEvent e) {
}

});
  回复  引用  查看