如果我使用以下代码创建一个新shell:
shell = new Shell( Display.getDefault(), SWT.RESIZE);
Run Code Online (Sandbox Code Playgroud)
然后这给了我一个没有标题栏或最小化/最大化按钮的shell,这就是我想要的.我可以将这个窗口调整到任何大小,这很好.但问题是,窗口固定在它的位置,我不能通过拖动它来移动它.
如果我添加SWT.CASCADE或者SWT.CLOSE,这给了我标题栏和关闭按钮,这是我不想要的,但是,它限制了窗口可以调整大小的程度,即我不能水平调整它的大小.限制.
如何在没有关闭按钮/标题栏的情况下使窗口可以移动?如果在SWT中没有本地方式来执行此操作,我可以通过侦听鼠标拖动事件并手动设置shell的位置来实现吗?如果是这样,我如何从鼠标的移动中获得鼠标坐标?
帮助将不胜感激.谢谢!
小智 5
你需要使用自己的听众.下面的代码应该有帮助: -
public class Demo {
static Boolean blnMouseDown=false;
static int xPos=0;
static int yPos=0;
public static void main(final String[] args) {
Display display=new Display();
final Shell shell = new Shell( Display.getDefault(), SWT.RESIZE);
shell.open();
shell.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent arg0) {
// TODO Auto-generated method stub
blnMouseDown=false;
}
@Override
public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
blnMouseDown=true;
xPos=e.x;
yPos=e.y;
}
@Override
public void mouseDoubleClick(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent e) {
// TODO Auto-generated method stub
if(blnMouseDown){
shell.setLocation(shell.getLocation().x+(e.x-xPos),shell.getLocation().y+(e.y-yPos));
}
}
});
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2926 次 |
| 最近记录: |