Java swing 窗口最小化到任务栏 点击左键显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java swing 窗口最小化到任务栏 点击左键显示相关的知识,希望对你有一定的参考价值。

参考技术A package seara.swing;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
* swing程序最小化至系统托盘
* @author seara
*/
public class TestSysteTray
public static void main(String args[])
TrayIcon trayIcon = null;
if (SystemTray.isSupported()) // 判断系统是否支持系统托盘

SystemTray tray = SystemTray.getSystemTray(); // 创建系统托盘
Image image = Toolkit.getDefaultToolkit().getImage("res\\icon.gif");// 载入图片,这里要写你的图标路径哦
ActionListener listener = new ActionListener()
public void actionPerformed(ActionEvent e)
JFrame frame = new JFrame();
frame.setBounds(400, 400, 200, 200);
JLabel label = new JLabel("welcome JDK1.6");
frame.add(label);
frame.setVisible(true);

;
// 创建弹出菜单
PopupMenu popup = new PopupMenu();
MenuItem defaultItem = new MenuItem("主界面");
defaultItem.addActionListener(listener);
MenuItem exitItem = new MenuItem("退出程序");
exitItem.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
if (JOptionPane.showConfirmDialog(null, "确定退出系统") == 0)
System.exit(0);


);
popup.add(defaultItem);
popup.add(exitItem);
trayIcon = new TrayIcon(image, "seara", popup);// 创建trayIcon
trayIcon.addActionListener(listener);
try
tray.add(trayIcon);
catch (AWTException e1)
e1.printStackTrace();



本回答被提问者采纳

如何最小化一个窗口到任务栏? (即不图标化)

【中文标题】如何最小化一个窗口到任务栏? (即不图标化)【英文标题】:How to minimize a window to the taskbar? (i.e. not iconify) 【发布时间】:2011-09-07 21:48:54 【问题描述】:

我有一个要最小化的窗口(到任务栏),所以我打电话给ShowWindow

ShowWindow(Handle, SW_MINIMIZE);

除了不是最小化自身(到任务栏),窗口是图标化

窗口没有父级:

如何将窗口最小化到任务栏?


更新:

Following some advice from 2002,我尝试设置WS_EX_APPWINDOW 窗口样式和/或确保窗口没有所有者:

不幸的是,这改变了我的 (Delphi) 应用程序的行为,因为我的应用程序现在有 两个 任务栏图标,而不是一个:

这当然是Delphi(5)的神器;因为我是trying to solve another issue。

但这不应该影响这个问题。我正在调用ShowWindow(..., SW_MINIMIZE) API,而不是最小化窗口 Windows 是 iconifying 应用程序。

如何将窗口最小化到任务栏?

【问题讨论】:

嘿,Microsoft 在 Windows 95 中添加了任务栏 - 很合适! (实际上它适用于从 Windows 95 到 Windows 7 的所有操作系统) 好吧,那么这个标签是有历史原因的,而不是因为这个应用程序需要与 W95 兼容,对吧? :) @Cobra_Fast:信不信由你,有些公司仍在使用 Win95,因为他们有内部软件,无法在更高版本上运行。不是每个人都会立即升级——在嘲笑你不了解的东西之前,你应该更多地了解公司环境。 (大约一年前,我们刚刚摆脱了上一个 Win2K 系统(所有 XP SP3),本周获得了我们的第一台 Win7 机器。) 我了解企业环境,但仍然认为@Cobra_Fast 的“Lol”很合适 ;) @Ian 我希望您知道 MSDN 上有两个很棒的页面:msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx 和 msdn.microsoft.com/en-us/library/cc144179(VS.85).aspx 【参考方案1】:

任务栏上的那个图标是应用程序(句柄)的图标,而不是主窗体的图标。

用途:

Application.Minimize;

编辑:但是从你的两个链接中,我知道你已经知道了……duh ;)

这适用于 MainForm:

TForm1 = class(TForm)
private
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
protected
  procedure CreateParams(var Params: TCreateParams); override;

...

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    WndParent := GetDesktopWindow;
  end;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
    ShowWindow(Handle, SW_MINIMIZE)
  else
    inherited;
end;

并从任务栏中隐藏 Application.Handle(仅具有 MainForm 的任务栏图标):将此 Form 的 Visible 属性设置为 True 并在项目文件中隐藏 Application:

Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;

对于这种形式,ShowWindow(Handle, SW_MINIMIZE); 应该可以工作。它还提供了 Windows 最小化或还原时的默认缩放功能。

(在 XP 和 W7 上使用 D5 和 D7 测试)

【讨论】:

天哪,这行得通!谢谢!但我仍然很好奇 Windows 在“最小化”我的窗口时在做什么——但不是真的。 WinSDK 关于 WS_EX_APPWINDOW:当窗口最小化时,强制将顶层窗口放到任务栏上。所以我认为并且非常肯定地知道,“正常”最小化(没有这种扩展窗口样式)就像最小化 MDI 应用程序中的 MDIChild:在这种情况下,Windows 桌面就是你的 MDIForm。 @Ian Boyd:您可能还想检查 fully worked out version 是否已添加到您的其他问题中。 也可以在 Windows 10 上使用,这就是我想要的。当我打开多个文档时,在视觉上 Word 和 Excel 会做同样的事情。【参考方案2】:

一个超级简单的解决方案是禁用 FORM 上的最小化图标 [对象检查器]-[表单属性]-[边框图标]-[biMinimize] 通过单击任务栏上的应用程序图标,仍然可以最小化和恢复应用程序

【讨论】:

以上是关于Java swing 窗口最小化到任务栏 点击左键显示的主要内容,如果未能解决你的问题,请参考以下文章

java swing 系统托盘

windows下QT程序如何最小化到任务栏

打开的程序如何快速最小化到任务栏

delphi在窗口最小化时不在任务栏

最小化后不在任务栏显示图标怎么办

Windows之常用快捷键总结