`

Swing实现将窗口最小化到系统托盘

阅读更多
package Assis;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;

public class ToTrayIcon extends JFrame implements ActionListener,
		WindowListener {

	private static final long serialVersionUID = 1L;
	// Variables declaration - do not modify
	private javax.swing.JLabel L_img;
	private javax.swing.JLabel L_img2;
	private PopupMenu pop;
	private MenuItem open, close;
	private TrayIcon trayicon;

	// End of variables declaration

	/** Creates new form MainFrame */
	public ToTrayIcon() {
		setTitle("Java实现系统托盘示例");
		setLocation(300, 300);
		initComponents();
		addWindowListener(this);
	}

	/**
	 * This method is called from within the constructor to initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is always
	 * regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

		// L_img = new javax.swing.JLabel(new
		// ImageIcon((MainFrame.class).getResource("com/topking/tray/images/netbean1.png")));
		// L_img2 = new javax.swing.JLabel(new
		// ImageIcon((MainFrame.class).getResource("com/topking/tray/images/netbean2.png")));
		L_img = new javax.swing.JLabel();
		L_img2 = new javax.swing.JLabel();

		pop = new PopupMenu();
		open = new MenuItem("打开");
		open.addActionListener(this);

		close = new MenuItem("关闭");
		close.addActionListener(this);

		pop.add(open);
		pop.add(close);

		if (SystemTray.isSupported()) {
			SystemTray tray = SystemTray.getSystemTray();
			Image icon = getToolkit().getImage(
					getClass().getResource("/user.png"));
			trayicon = new TrayIcon(icon, "系统托盘示例(java)", pop);
			trayicon.addMouseListener(new MouseListener() {

				public void mouseClicked(MouseEvent e) {
					if (e.getClickCount() == 2) {
						if (getExtendedState() == JFrame.ICONIFIED) {
							openFrame();// 还原窗口
						} else {
							// 设置窗口状态(最小化至托盘)
							setExtendedState(JFrame.ICONIFIED);
						}
					}
				}

				public void mouseEntered(MouseEvent e) {

				}

				public void mouseExited(MouseEvent e) {

				}

				public void mousePressed(MouseEvent e) {

				}

				public void mouseReleased(MouseEvent e) {

				}

			});

			try {
				tray.add(trayicon);
			} catch (AWTException e) {
				e.printStackTrace();
			}
		}
		/** *设置界面布局,可以不用理睬它 */
		GroupLayout layout = new GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		ParallelGroup parg = layout
				.createParallelGroup(GroupLayout.Alignment.LEADING);
		SequentialGroup seqg = layout.createSequentialGroup();
		ParallelGroup parg2 = layout
				.createParallelGroup(GroupLayout.Alignment.TRAILING);

		ParallelGroup parg3 = parg2.addComponent(L_img2,
				GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 380,
				Short.MAX_VALUE);
		ParallelGroup parg4 = parg3.addComponent(L_img,
				GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 380,
				Short.MAX_VALUE);
		SequentialGroup seqg2 = seqg.addContainerGap();
		SequentialGroup seqg3 = seqg2.addGroup(parg4);
		SequentialGroup seqg4 = seqg3.addContainerGap();
		ParallelGroup parg5 = parg.addGroup(GroupLayout.Alignment.TRAILING,
				seqg4);
		layout.setHorizontalGroup(parg5);
		parg = layout.createParallelGroup(GroupLayout.Alignment.LEADING);
		layout.setVerticalGroup(parg.addGroup(layout.createSequentialGroup()
				.addContainerGap().addComponent(L_img).addGap(29, 29, 29)
				.addComponent(L_img2, GroupLayout.PREFERRED_SIZE, 222,
						GroupLayout.PREFERRED_SIZE).addContainerGap(39,
						Short.MAX_VALUE)));

		pack();
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new ToTrayIcon().setVisible(true);
			}
		});
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == open) {
			openFrame();
		}
		if (e.getSource() == close) {
			System.exit(-1);
		}
	}

	public void openFrame() {
		setVisible(true);// 设置为可见
		setAlwaysOnTop(true);// 设置置顶
		// 设置窗口状态(在最小化状态弹出显示)
		setExtendedState(JFrame.NORMAL);
	}

	public void windowActivated(WindowEvent arg0) {

	}

	public void windowClosed(WindowEvent arg0) {
		dispose();
	}

	public void windowClosing(WindowEvent arg0) {

	}

	public void windowDeactivated(WindowEvent arg0) {

	}

	public void windowDeiconified(WindowEvent arg0) {

	}

	// 窗口最小化
	public void windowIconified(WindowEvent arg0) {
		setVisible(false);// 设置为不可见
	}

	public void windowOpened(WindowEvent arg0) {

	}

}

 

分享到:
评论

相关推荐

    java实现最小化到托盘

    8. **窗口最小化处理**: 当用户点击窗口的最小化按钮时,可以调用`dispose()`方法关闭窗口,并将焦点移到托盘图标上。 9. **处理窗口事件**: 为了实现从托盘恢复窗口,需要监听窗口状态事件,例如`WindowListener`...

    Swing 实现系统托盘

    在Java的Swing库中,实现系统托盘功能可以为应用程序提供一个持续的交互界面,即使主窗口已经最小化或关闭。系统托盘,也称为通知区域或系统通知区,通常位于操作系统任务栏的右侧,允许用户快速访问常用的功能或...

    JFrame最小化到托盘

    "JFrame最小化到托盘"指的是当用户点击窗口的最小化按钮时,不是将窗口缩小到任务栏,而是将其隐藏到系统托盘区域。这种方式通常用于需要长时间运行的应用程序,如聊天软件、下载工具等,它能让用户在不占用桌面空间...

    Java程序最小到系统托盘源代码

    在Java编程中,将应用程序最小化到系统托盘是一项常见的需求,特别是在开发桌面应用时,用户可能希望在不关闭程序的情况下将其隐藏。本资源提供的"Java程序最小到系统托盘源代码"是通过JNI(Java Native Interface)...

    Java最小化到托盘的方法

    在Java中,实现应用程序最小化至系统托盘是一项常见但实用的功能,尤其对于后台服务或者不希望占据屏幕空间的应用程序而言。本文将详细介绍如何利用Java AWT包中的`SystemTray`类以及`TrayIcon`类来实现这一功能。 ...

    Java系统托盘 Java系统托盘

    最后,为了在主窗口最小化时自动隐藏到系统托盘,我们需要在窗口的`WindowListener`中添加相应的逻辑: ```java frame.addWindowStateListener(new WindowAdapter() { @Override public void windowMinimized...

    后台运行系统托盘功能

    1. **最小化到系统托盘**:当用户点击程序的最小化按钮时,程序并不关闭,而是隐藏其主窗口,只在系统托盘显示图标。这样,用户可以在任何时候通过点击托盘图标快速恢复程序窗口。 2. **持续运行服务**:一些需要在...

    java实现系统托盘

    在Java编程中,实现系统托盘功能主要涉及到`java.awt.TrayIcon`类,这是Java Swing库的一部分,用于在操作系统的任务栏或系统托盘区域创建和管理图标。这个功能通常用于提供一种方式,使得即使主窗口被最小化或者...

    托盘图标(最小化时显示)

    - 程序设计:开发者在编写应用程序时,会用到特定的API(如Windows API中的`Shell_NotifyIcon`函数)来设置程序在最小化时将窗口隐藏并显示托盘图标。 - 配置设置:部分程序允许用户在设置中选择是否在最小化时...

    java系统托盘实现缩小在开始菜单右下角的功能

    Java系统托盘是Java应用程序与操作系统桌面环境交互的一种方式,它允许程序在主窗口最小化或隐藏时,仍然可以通过系统托盘图标进行操作。在Windows系统中,这种功能通常表现为程序图标出现在开始菜单右下角的任务栏...

    JAVA系统托盘图标控制程序

    在Java编程语言中,系统托盘图标(System Tray Icon)是一种功能强大的用户界面元素,它允许应用程序在操作系统任务栏的托盘区域显示图标并提供菜单或快捷操作,即使主窗口被最小化或隐藏也能与用户交互。...

    java程序实现系统托盘功能

    在Java编程环境中,实现系统托盘功能是一项常见的需求,它允许程序在主窗口最小化或关闭后仍然在操作系统任务栏的系统托盘区域保持活跃,从而提供便捷的访问入口,如QQ、微信等应用程序就广泛使用了这一特性。本文将...

    圣诞倒计时小软件_实现系统托盘背景透明依附边沿自动隐藏

    最小化到系统托盘的功能通过`SystemTray`和`TrayIcon`类实现。当用户点击最小化按钮时,窗口将隐藏,图标出现在系统托盘区。用户可以通过托盘图标重新显示窗口。 依附边沿自动隐藏的特性类似于QQ的消息框,通过检测...

    java实现360悬浮球

    用户可以通过将悬浮球最小化到系统托盘,而不是关闭它。这需要实现TrayIcon类,并添加适当的监听器来处理点击事件。 8. **资源管理**: `icon`文件可能是一个PNG或JPEG图像,Java的ImageIcon类可以加载这种图像资源...

    使用java的AWT或者swing来做任务栏菜单

    通过以上步骤,你可以创建一个具有自定义菜单的系统托盘图标,使用户即使在最小化程序后也能访问关键功能。这在现代桌面应用中是非常实用的设计,特别是在需要后台运行或快速访问设置的情况下。在实际开发中,你还...

    JAVA+SQL电子通讯录带系统托盘(论文+源代码).rar

    当用户将程序最小化到系统托盘后,可以通过托盘图标进行操作,如显示主窗口、退出程序等。 论文部分可能详细阐述了项目的背景、设计思路、技术实现、性能分析以及可能的改进方向。它为理解项目的整体架构、技术选型...

    jdic 完成托盘 进度条

    系统托盘是操作系统任务栏的一部分,允许应用程序在主窗口最小化或隐藏时,仍然可以通过图标提供交互。JDIC提供了`SystemTray`类,使得Java程序能够轻松地创建和管理这些托盘图标。通过`SystemTray`,开发者可以设置...

    毕业答辩-JAVASQL电子通讯录带系统托盘(论文源代码).rar

    在本项目中,系统托盘功能允许用户将通讯录程序最小化到系统托盘,节省桌面空间,提高用户体验。这通常通过JNI(Java Native Interface)或者特定的库如JNA(Java Native Access)实现,调用操作系统级别的API来完成...

    系统托盘完整例子,功能完整

    系统托盘,也被称为通知区域或任务栏图标,是Windows操作系统中一个重要的功能,它允许应用程序在主界面被最小化或者隐藏时,仍然在后台运行并提供必要的交互。本示例是一个功能完整的系统托盘应用,它展示了如何...

    JAVA+SQL电子通讯录带系统托盘(附源代码)

    同时,Java的多线程能力使得程序能在后台运行,即使窗口最小化也能响应用户的操作。 其次,SQL(Structured Query Language)是用于管理关系数据库的标准语言。在电子通讯录应用中,SQL用于存储和检索联系人数据。...

Global site tag (gtag.js) - Google Analytics