gpt4 book ai didi

java - 如何创建一个没有标题栏/关闭按钮的可移动 SWT shell?

转载 作者:行者123 更新时间:2023-11-29 10:15:32 25 4
gpt4 key购买 nike

如果我使用以下代码创建一个新的 shell:

shell = new Shell( Display.getDefault(), SWT.RESIZE);        

然后这给了我一个没有标题栏或最小化/最大化按钮的外壳,这就是我想要的。我可以将此窗口的大小调整为任意大小,效果很好。但问题是,窗口是固定在原位的,我无法通过拖动来移动它。

如果我添加 SWT.CASCADESWT.CLOSE,这会给我标题栏和关闭按钮,这是我不想要的,但此外,它限制窗口的大小可以调整到多小,即我无法将其水平调整超过某个限制。

如何在没有关闭按钮/标题栏的情况下使窗口可移动?如果 SWT 中没有本地方法可以做到这一点,我可以通过监听鼠标拖动事件并手动设置 shell 的位置来做到这一点吗?如果是这样,我如何从鼠标的移动中获取鼠标坐标?

帮助将不胜感激。谢谢!

最佳答案

您需要使用自己的监听器。下面的代码应该有所帮助:-

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

}

关于java - 如何创建一个没有标题栏/关闭按钮的可移动 SWT shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com