SWT做的项目,无法在任务栏关闭程序

卡纳瓦咯 2013-03-28 05:42:29
我用SWT做的java桌面程序,实例化shell的时候用的SWT.NO_TRIM
代码如下:
shell = new Shell(SWT.NO_TRIM);

这样的话,在任务栏无法关闭程序。右键也是无法关闭。哪位有解决办法吗?

如下图所示:
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Box321 2014-07-11
  • 打赏
  • 举报
回复
我也遇到了这样的问题,这个问题解决了么?
卡纳瓦咯 2013-04-01
  • 打赏
  • 举报
回复
引用 5 楼 dracularking 的回复:
我试了下,关闭窗口,事件会得到响应,xp系统
我也刚在XP试了,alt+f4 可以关闭,但是win7下关不了。。。无语了 另外,点鼠标最小化窗口到任务栏也不好使,
卡纳瓦咯 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
没有加监听器吗? ShellListener(new ShellListener(){ public void ShellClosed(ShellEvent e){ } });
加了监听了,还是不好使

shell.addShellListener(new ShellListener(){
	@Override
	public void shellClosed(ShellEvent shellevent) {
		// TODO Auto-generated method stub
		((Shell) shellevent.getSource()).dispose();
	}
});
昨天鼓捣了一下午没搞定,
dracularking 2013-03-29
  • 打赏
  • 举报
回复
我试了下,关闭窗口,事件会得到响应,xp系统
卡纳瓦咯 2013-03-29
  • 打赏
  • 举报
回复
代码贴出来,给大伙看看


import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Decorations;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class MainClass {
	public static void main(String[] a) {
		final Display display = new Display();
		final Shell shell = new Shell(SWT.NO_TRIM | SWT.NONE);
		shell.setText("Sash One");
		// The SWT.BORDER style
		Decorations d = new Decorations(shell, SWT.NO_TRIM);
//		d.setLayoutData(new GridData(GridData.FILL_BOTH));
//		d.setLayout(new FillLayout());
//		Label l = new Label(d, SWT.CENTER);
//		l.setText("SWT.NO_TRIM");
//
//		d.setBounds(20, 20, 100, 100);

		shell.pack();
		shell.open();

		Display.getCurrent().addFilter(SWT.KeyDown, new Listener() {
			public void handleEvent(Event event) {
				if (event.keyCode == SWT.F4 && (event.stateMask & SWT.ALT) != 0) {
					if (Display.getCurrent().getActiveShell() == shell) {
						shell.close();
					}
				}
			}
		});
//		shell.addListener(SWT.Deactivate, new Listener() {
//			
//			@Override
//			public void handleEvent(Event e) {
//				System.out.println(e.keyCode + " " + e.stateMask + " " + e.button + "" );
//				shell.setMinimized(true);
//			}
//		});
		
		shell.addListener(SWT.Close, new Listener() {
			
			@Override
			public void handleEvent(Event e) {
				System.out.println("fafafafa" + e.keyCode + " " + e.stateMask + " " + e.button + "" );
				shell.setMinimized(false);
			}
		});
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		display.dispose();
	}
}

卡纳瓦咯 2013-03-29
  • 打赏
  • 举报
回复
我试了

		shell.addListener(SWT.Deactivate, new Listener() {
			
			@Override
			public void handleEvent(Event e) {
				System.out.println("closeeeeeeeeee" + e.keyCode + " " + e.stateMask + " " + e.button + "" );
				shell.setMinimized(true);

				
			}
		});
点击任务栏图标最小化时,窗口只会一闪,然后还在原处。

		shell.addListener(SWT.Close, new Listener() {
			
			@Override
			public void handleEvent(Event e) {
				System.out.println("closeeeeeeeeee" + e.keyCode + " " + e.stateMask + " " + e.button + "" );
				shell.setMinimized(true);

				
			}
		});
点击任务栏关闭图标,根本无法捕获到此事件。 等高手
  • 打赏
  • 举报
回复
没有加监听器吗? ShellListener(new ShellListener(){ public void ShellClosed(ShellEvent e){ } });

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧