1. 程式人生 > >JFrame實現系統托盤功能縮放在工作列,窗體圖示自定義

JFrame實現系統托盤功能縮放在工作列,窗體圖示自定義

先看效果圖:


一、關閉後最小化到工作列

public class MainWindow extends JFrame {
        private static final long serialVersionUID = 1L;
        private JPanel contentPane;
	SystemTray systemTray;
	TrayIcon trayIcon=null;
/**
	 * Create the frame.
	 */
	public MainWindow() {
		this.setTitle("室內定位系統(IPS)服務端");
                String iconpath="img/icon1.png";//工作列圖示,最小化視窗
                this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//關鍵,設定關閉視窗無操作,用於後面的窗體監聽事件
                this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				int i=JOptionPane.showConfirmDialog(null, "確認要最小化視窗嗎?", "最小化視窗", JOptionPane.OK_CANCEL_OPTION);
				if(i==JOptionPane.OK_OPTION){
//					System.exit(0);
					
					dispose();
					//獲取預設的圖片
					iconImage=Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource(iconpath));
					if (SystemTray.isSupported()) {// 判斷系統是否支援系統托盤
						if (systemTray==null) {
							systemTray=SystemTray.getSystemTray();//建立系統托盤
							if (trayIcon!=null) {
								systemTray.remove(trayIcon);
							}
						}
						//建立彈出式選單
						PopupMenu popup=new PopupMenu();
						//主介面選項
						MenuItem mainMenuItem=new MenuItem("主介面");
//						mainMenuItem.setActionCommand("main menu");
						mainMenuItem.addActionListener(new ActionListener(){
							@Override
							public void actionPerformed(ActionEvent e) {
								setVisible(true);
//								setAlwaysOnTop(true);
//								systemTray.remove(trayIcon);
							}
						});
						//退出程式選項
						MenuItem exitMenuItem=new MenuItem("退出");
//						exitMenuItem.setActionCommand("exit");
						exitMenuItem.addActionListener(new ActionListener(){
							@Override
							public void actionPerformed(ActionEvent e) {
//								dispose();
								System.exit(0);
							}
						});
						
						popup.add(mainMenuItem);
						//彈出式選單新增分割線
						popup.addSeparator();
						popup.add(exitMenuItem);
//						image=Toolkit.getDefaultToolkit().getImage("Img/ipsicon.png");
						trayIcon=new TrayIcon(iconImage, "IPS", popup);//建立trayIcon
						trayIcon.setImageAutoSize(true);
						trayIcon.addActionListener(new ActionListener() {
							
							@Override
							public void actionPerformed(ActionEvent e) {
								// TODO Auto-generated method stub
								setVisible(true);
//								setAlwaysOnTop(true);
//								systemTray.remove(trayIcon);
							}
						});
						try {
							systemTray.add(trayIcon);
						} catch (AWTException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
				}
				else{
					return;
				}
			}
		});	
       }
}


關鍵點有如下幾條:

        (1)窗體設定預設的關閉操作,在很多軟體中為避免關閉按鈕退出程式,會設定關閉最小化托盤的操作,如QQ;這裡需設定關閉無操作,系統預設是直接退出程式。

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

         (2)新增窗體關閉監聽事件

this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){}});

          (3)建立系統托盤和彈出式選單,註釋比較清楚不再說明。

二、窗體圖示自定義

在JFrame的使用中,自定義的圖示匯出為jar可執行檔案後,常常不顯示,上面部落格解決了該問題,最主要的是將圖片資源要放在src目錄下

原因:在利用Fatjar匯出時特意看了下打包檔案,只有在src中才會自動新增進去;如果是根目錄下,需要自己新增(該方式沒驗證)。

                String imgpath="img/icon.png";//桌面圖示
		//String iconpath="img/icon1.png";//工作列圖示,最小化視窗
		//-----------------------------------------------
		imageIcon=Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource(imgpath));
		
		//----------------------------------------------------------------
//		image=Toolkit.getDefaultToolkit().getImage("/Img/ipsicon.png");
		this.setIconImage(imageIcon);

關鍵是從src檔案中獲取圖片資源:

                          imageIcon=Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource(imgpath));  

相關推薦

JFrame實現系統托盤功能放在工作窗體圖示定義

先看效果圖: 一、關閉後最小化到工作列 public class MainWindow extends JFrame { private static final long serialVersionUID = 1L; private J

Swing實現系統托盤功能

private SystemTray tray;//定義系統托盤 private TrayIcon trayIcon;//定義系統托盤圖示 private PopupMenu popup=new Po

vue中實現圖片全屏預覽支援移動端

# 安裝 npm install vue-photo-preview --save   # 引入 import preview from 'vue-photo-preview' import 'vue-photo-preview/dist/skin.css' Vue.use(pr

iOS手勢識別的詳細使用(拖動,,旋轉,點選,手勢依賴,定義手勢)

1、UIGestureRecognizer介紹手勢識別在iOS上非常重要,手勢操作移動裝置的重要特徵,極大的增加了移動裝置使用便捷性。iOS系統在3.2以後,為方便開發這使用一些常用的手勢,提供了UIGestureRecognizer類。手勢識別UIGestureRecogn

解決實現類添加了@Transactional註解後無法獲取定義註解的問題

背景描述 自定義了一個註解: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Schedul

JAVA實現圖片等比,圖片擷取功能--封裝類

import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.

java實現圖片裁剪、功能

import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.Buff

使用計時器實現圖片的準確

gree tin 實現 idt 放大 height tint onload ati <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

實現系統托盤

新建 logs menus strip enable inter 添加 menu img 實現系統托盤: 1.新建一個Windows窗體應用程序。 2.在當前窗體添加一個contextMenuStrip上下文菜單控件。 3.添加NotifyIcon1控件,用於顯示任務欄圖標

C#在高分屏上讓窗體程序忽略系統的顯示

bool pos nbsp render services col etc thread text [STAThread] static void Main() { if (Environment.OSVersion.Version.Major &

css3 transform:scale(x)實現字體的

edi 不變 screen info html -s clas 實現 背景 css3 transform:scale(x)字體的縮放: transform:scale(x),針對於整體的縮放,縮放的整體包括寬,高,背景。這自然對於內聯元素就無法使用此屬性,最好使用無屬性的s

Java Swing 實現系統托盤圖標

bubuko alt 匹配 fig ons 參數 mage 彈出 con 在實現托盤圖標時,出現彈出式菜單顯示中文亂碼,無法顯示正確的文字 查詢相關資料後發現是字符編碼不匹配,查詢資料出處 解決方法 1、通過修改Java項目的默認編碼為GBK; 2、在Run Configu

iOS Swift 實現圖片點擊回彈動畫

obj mean awake art 簡單 onf 點擊縮放 fork sde 效果就是下面這個樣子: 思路借鑒的是MZTimerLabel,有想過做一個自定義的ImageView,但那樣的話之前view用必須要改代碼,索性就按照MZTimerLabel這個方式實現,簡

20.QT-Qpixmap實現圖片鼠標,鼠標拖動示例(詳解)

下滑 resize pix slot https qpi map += als #include "widget.h" Widget::Widget(): BigButton("放大",this), LittleButton("縮小",this),

React native 禁止字型跟隨系統字型大小

MainActivity.java 檔案中加入 import android.content.res.Configuration; import android.content.res.Resources;  後面類要加入 @Override public Resource

Fresco使用PhotoDraweeView 實現圖片的手勢

1.gradle引入Fresco   compile 'com.facebook.fresco:fresco:0.11.0+' 2.在application中初始化Fresco Fresco.initialize(this, ImagePipelineConfigFactory

使用Matlab實現對圖片的

  在做影象處理的時候,有時需要對圖片的畫素進行放大或則縮小。   使用Matlab很容易實現對影象的放大和縮小。這裡只講縮放到固定畫素的方法。 clear; clc; %清除以前的資料 folderN

windows/mfc實現視窗隱藏同時 在工作上無圖示顯示功能

當實現窗體隱藏時,同時讓工作列隱藏大多直接改變樣式就行 只需要執行 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 但是 在實際效果中,該方法

mfc實現系統托盤

Windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示一個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後臺執行的類似程式,為了不干擾前臺程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視

Raphael Js實現以滑鼠中心paper

主要邏輯就是計算縮放前後滑鼠所在位置偏差,來調整view起點座標到滑鼠點。 var scale; window.onload=function(){ ............... ........