最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)系統(tǒng)托盤(pán)示例

 更新時(shí)間:2014年03月07日 14:49:11   作者:  
桌面的系統(tǒng)托盤(pán)即當(dāng)程序最小化或者關(guān)閉按鈕程序并沒(méi)有退出,而是最小化在任務(wù)狀態(tài)區(qū)域,下面是使用java實(shí)現(xiàn)系統(tǒng)托盤(pán)示例

桌面的系統(tǒng)托盤(pán)即當(dāng)程序最小化或者關(guān)閉按鈕程序并沒(méi)有退出,而是最小化在任務(wù)狀態(tài)區(qū)域(Windows系統(tǒng)),當(dāng)鼠標(biāo)點(diǎn)擊那個(gè)區(qū)域所在的圖標(biāo)有提示以及其他的操作。在 Microsoft Windows 上,它被稱(chēng)為“任務(wù)欄狀態(tài)區(qū)域 (Taskbar Status Area)”,在 Gnome 上,它被稱(chēng)為“通知區(qū)域 (Notification Area)”,在 KDE 上,它被成為“系統(tǒng)托盤(pán) (System Tray)”。系統(tǒng)托盤(pán)由運(yùn)行在桌面上的所有應(yīng)用程序共享。
jdk1.6 中新增了兩個(gè)類(lèi)來(lái)實(shí)現(xiàn):
SystemTray和 TrayIcon,以下為詳細(xì)介紹:

SystemTray
類(lèi)介紹:
在某些平臺(tái)上,可能不存在或不支持系統(tǒng)托盤(pán),所以要首先使用SystemTray.isSupported()來(lái)檢查當(dāng)前的系統(tǒng)是否支持系統(tǒng)托盤(pán)

SystemTray可以包含一個(gè)或多個(gè) TrayIcon,可以使用 add(java.awt.TrayIcon)方法將它們添加到托盤(pán),當(dāng)不再需要托盤(pán)時(shí),使用 remove(java.awt.TrayIcon)
移除它。

TrayIcon由圖像、彈出菜單和一組相關(guān)偵聽(tīng)器組成。每個(gè) Java 應(yīng)用程序都有一個(gè) SystemTray實(shí)例,在應(yīng)用程序運(yùn)行時(shí),它允許應(yīng)用程序與桌面系統(tǒng)托盤(pán)建立連接。
SystemTray實(shí)例可以通過(guò)getSystemTray ()方法獲得。應(yīng)用程序不能創(chuàng)建自己的 SystemTray

復(fù)制代碼 代碼如下:

import java.awt.AWTException;
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.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;

/**
 *
 * @author Mr.LiuTao
 */
public class TrayByJdk extends JFrame implements ActionListener{

    private JPanel pane = null;
    private JButton button = null; // 啟動(dòng)托盤(pán)圖標(biāo)的按鈕
    private JLabel label = null; // 用來(lái)顯示系統(tǒng)是否支持托盤(pán)的信息
    private TrayIcon trayIcon = null; // 托盤(pán)圖標(biāo)
    private Timer shanshuo = null;
    private ImageIcon icon1 = null;
    private ImageIcon icon2 = null;
    private SystemTray tray = null; // 本操作系統(tǒng)托盤(pán)的實(shí)例
    boolean gengai = false;
    //采用jdk1.6的托盤(pán)技術(shù) 實(shí)現(xiàn)跨平臺(tái)的應(yīng)用
    public TrayByJdk() {
        //super("托盤(pán)技術(shù)演示");
        icon1 = new ImageIcon("G:\\javaworks\\eclipsework\\山寨QQClient\\images\\16.gif"); // 將要顯示到托盤(pán)中的圖標(biāo)
        icon2 = new ImageIcon("G:\\javaworks\\eclipsework\\山寨QQClient\\images\\15.gif"); // 將要顯示到托盤(pán)中的圖標(biāo)
        try {
            // 將LookAndFeel設(shè)置成Windows樣式
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        pane = new JPanel();
        button = new JButton("縮小到托盤(pán)");
        button.setEnabled(false);
        label = new JLabel("本操作系統(tǒng)不支持托盤(pán)");
        pane.add(label);
        pane.add(button);
        //判斷是否支持托盤(pán)
        if (SystemTray.isSupported()) {
            this.tray();
        }
        shanshuo = new Timer(1000,this);
        shanshuo.start();
        this.getContentPane().add(pane);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(300, 200);
        this.addWindowStateListener(new WindowStateListener () {
   public void windowStateChanged(WindowEvent state) {
    if(state.getNewState() == 1 || state.getNewState() == 7) {
     yinca();
    }
   }
  });

        this.setVisible(false);
        System.out.println("=============="+this.isVisible());
    }

    /**
     * 托盤(pán)相關(guān)代碼
     */
    private void tray() {
        label.setText("本操作系統(tǒng)支持托盤(pán)");
        button.setEnabled(true);
        tray = SystemTray.getSystemTray(); // 獲得本操作系統(tǒng)托盤(pán)的實(shí)例
        //ImageIcon icon = new ImageIcon("tray.gif"); // 將要顯示到托盤(pán)中的圖標(biāo)
        PopupMenu pop = new PopupMenu(); // 構(gòu)造一個(gè)右鍵彈出式菜單
        MenuItem show = new MenuItem("顯示窗口");
        MenuItem exit = new MenuItem("退出演示");
        MenuItem author = new MenuItem("Author");      
        /**
         * TrayIcon有三個(gè)構(gòu)造
         * TrayIcon(Image image) 用“圖標(biāo)”來(lái)構(gòu)造
         * TrayIcon(Image image, String tooltip) 用“圖標(biāo)”和“ToolTip”構(gòu)造
         * TrayIcon(Image image, String tooltip, PopupMenu popup) 用“圖標(biāo)”,“ToolTip”,“彈出菜單”來(lái)構(gòu)造一個(gè)托盤(pán)圖標(biāo)
         */
        trayIcon = new TrayIcon(icon1.getImage(), "托盤(pán)技術(shù)演示", pop);
        // 點(diǎn)擊本按鈕后窗口被關(guān)閉,托盤(pán)圖標(biāo)被添加到系統(tǒng)的托盤(pán)中
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {
                    tray.add(trayIcon); // 將托盤(pán)圖標(biāo)添加到系統(tǒng)的托盤(pán)實(shí)例中
                    setVisible(false); // 使窗口不可視
                } catch (AWTException ex) {
                    ex.printStackTrace();
                }
            }
        });
        /**
         * 添加鼠標(biāo)監(jiān)聽(tīng)器,當(dāng)鼠標(biāo)在托盤(pán)圖標(biāo)上雙擊時(shí),默認(rèn)顯示窗口
         */
        trayIcon.addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) { // 鼠標(biāo)雙擊
                    tray.remove(trayIcon); // 從系統(tǒng)的托盤(pán)實(shí)例中移除托盤(pán)圖標(biāo)
                    setVisible(true); // 顯示窗口
                }
            }
        });
        show.addActionListener(new ActionListener() { // 點(diǎn)擊“顯示窗口”菜單后將窗口顯示出來(lái)

            public void actionPerformed(ActionEvent e) {
                tray.remove(trayIcon); // 從系統(tǒng)的托盤(pán)實(shí)例中移除托盤(pán)圖標(biāo)
                setVisible(true); // 顯示窗口
            }
        });
        exit.addActionListener(new ActionListener() { // 點(diǎn)擊“退出演示”菜單后推出程序

            public void actionPerformed(ActionEvent e) {
                System.exit(0); // 退出程序
            }
        });
        author.addActionListener(new ActionListener() { // 點(diǎn)擊“退出演示”菜單后推出程序

            public void actionPerformed(ActionEvent e) {
                showMessage();
            }
        });
        pop.add(show);
        pop.add(exit);
        pop.add(author);
    }
    /**
     * 顯示信息
     */
    private void showMessage() {
        JOptionPane.showMessageDialog(this, new JLabel("這是一個(gè)系統(tǒng)托盤(pán)"), "消息", JOptionPane.INFORMATION_MESSAGE);
    }
    public static void main(String[] args) {
        new TrayByJdk().yinca();
    }
    public void yinca(){
      try {
   tray.add(trayIcon);
  } catch (AWTException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } // 將托盤(pán)圖標(biāo)添加到系統(tǒng)的托盤(pán)實(shí)例中
         setVisible(false); // 使窗口不可視
    }
 @Override
 public void actionPerformed(ActionEvent arg0) {
  if(!gengai){
   trayIcon.setImage(icon2.getImage());
   gengai = true;
  }else{
   trayIcon.setImage(icon1.getImage());
   gengai = false;
  }
 }
}

相關(guān)文章

  • SpringBoot中的404錯(cuò)誤:原因、影響及解決策略

    SpringBoot中的404錯(cuò)誤:原因、影響及解決策略

    本文詳細(xì)介紹了SpringBoot中404錯(cuò)誤的出現(xiàn)原因、影響以及處理策略,404錯(cuò)誤常見(jiàn)于URL路徑錯(cuò)誤、控制器配置問(wèn)題、靜態(tài)資源配置錯(cuò)誤、依賴(lài)缺失或版本不兼容、配置錯(cuò)誤和服務(wù)器配置問(wèn)題,解決方法包括檢查URL路徑、審查控制器配置、配置靜態(tài)資源
    2025-02-02
  • java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換

    java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換

    我們?cè)谌粘i_(kāi)發(fā)時(shí)會(huì)經(jīng)常遇到將一個(gè)字符串按照逗號(hào)進(jìn)行分割,這篇文章主要給大家介紹了關(guān)于java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-02-02
  • idea中加入git版本控制的方法及步驟詳解

    idea中加入git版本控制的方法及步驟詳解

    在idea中加入git版本控制,方便團(tuán)隊(duì)中多人協(xié)同開(kāi)發(fā),項(xiàng)目可以同時(shí)方便進(jìn)行管理和迭代。下面就是idea中加入git 的方法和步驟,感興趣的朋友一起看看吧
    2021-09-09
  • Java異步編程的5種異步實(shí)現(xiàn)方式詳解

    Java異步編程的5種異步實(shí)現(xiàn)方式詳解

    這篇文章主要介紹了Java異步編程的5種異步實(shí)現(xiàn)方式詳解,異步編程是程序并發(fā)運(yùn)行的一種手段,它允許多個(gè)事件同時(shí)發(fā)生,當(dāng)程序調(diào)用需要長(zhǎng)時(shí)間運(yùn)行的方法時(shí),它不會(huì)阻塞當(dāng)前的執(zhí)行流程,程序可以繼續(xù)運(yùn)行,需要的朋友可以參考下
    2024-01-01
  • java 使用Scanner類(lèi)接收從控制臺(tái)輸入的數(shù)據(jù)方式

    java 使用Scanner類(lèi)接收從控制臺(tái)輸入的數(shù)據(jù)方式

    這篇文章主要介紹了java 使用Scanner類(lèi)接收從控制臺(tái)輸入的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java 學(xué)習(xí)筆記(入門(mén)篇)_程序流程控制結(jié)構(gòu)和方法

    java 學(xué)習(xí)筆記(入門(mén)篇)_程序流程控制結(jié)構(gòu)和方法

    程序流程控制結(jié)構(gòu)分為:順序、選擇、循環(huán)以及異常處理結(jié)構(gòu),語(yǔ)句是程序的基本組成單位,一般來(lái)說(shuō)語(yǔ)句的執(zhí)行流程是按順序來(lái)進(jìn)行的,但是當(dāng)遇到一些特殊的條件,比如循環(huán),這時(shí)候語(yǔ)句就會(huì)按照流程控制結(jié)構(gòu)來(lái)進(jìn)行了
    2013-01-01
  • Spring事務(wù)管理只對(duì)出現(xiàn)運(yùn)行期異常進(jìn)行回滾

    Spring事務(wù)管理只對(duì)出現(xiàn)運(yùn)行期異常進(jìn)行回滾

    Spring的事務(wù)管理默認(rèn)只對(duì)出現(xiàn)運(yùn)行期異常(java.lang.RuntimeException及其子類(lèi))進(jìn)行回滾,需要了解更多Spring事務(wù)方面的知識(shí),可詳看本文
    2012-11-11
  • Netty分布式flush方法刷新buffer隊(duì)列源碼剖析

    Netty分布式flush方法刷新buffer隊(duì)列源碼剖析

    這篇文章主要為大家介紹了Netty分布式flush方法刷新buffer隊(duì)列源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • java 基礎(chǔ)教程之多線(xiàn)程詳解及簡(jiǎn)單實(shí)例

    java 基礎(chǔ)教程之多線(xiàn)程詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 基礎(chǔ)教程之多線(xiàn)程詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,線(xiàn)程的基本屬性、如何創(chuàng)建線(xiàn)程、線(xiàn)程的狀態(tài)切換以及線(xiàn)程通信,需要的朋友可以參考下
    2017-03-03
  • SpringBoot接口實(shí)現(xiàn)百萬(wàn)并發(fā)的代碼示例

    SpringBoot接口實(shí)現(xiàn)百萬(wàn)并發(fā)的代碼示例

    隨著互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的應(yīng)用需要支持高并發(fā),在這種情況下,如何實(shí)現(xiàn)高并發(fā)成為了一個(gè)重要的問(wèn)題,Spring Boot是一個(gè)非常流行的Java框架,它提供了很多方便的功能來(lái)支持高并發(fā),本文將介紹如何使用Spring Boot來(lái)實(shí)現(xiàn)百萬(wàn)并發(fā)
    2023-10-10

最新評(píng)論

泾源县| 临沂市| 屯门区| 河间市| 东台市| 灌阳县| 孝昌县| 元氏县| 渭南市| 洞头县| 通渭县| 桃江县| 西丰县| 红原县| 绩溪县| 黔江区| 政和县| 明星| 徐闻县| 澜沧| 永顺县| 华亭县| 中宁县| 临泉县| 东至县| 平顶山市| 清新县| 永善县| 贵溪市| 江山市| 枝江市| 临高县| 固始县| 石狮市| 株洲县| 当阳市| 陵川县| 镇巴县| 林州市| 旅游| 白水县|