Java 有关窗口最小化和还原的练习代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
*这些代码本来是为了用于实现类似于迅雷等下载软件的浮动窗口的,
*暂时,那个自动在桌面窗口边隐藏自己的功能还没有实现
*所以暂时把代码改成显示一张图片。。。迟些我再实现自动隐藏的功能

*现在的这些代码,还是有不足的地方,在重复的执行最小化和还原时,有些操作不能成功,初步判断是因为有一些*实例被销毁,但是却又重新被调用造成

*/

public class LCD_FrameHide extends JFrame implements Runnable,MouseListener{
 private int xx;//窗口左上角x坐标
 private int yy;//窗口左上角y坐标
 private int cdheight=100;//窗口的高
 private int cdwidth=100;//窗口的宽
 private int hidepeer=10;//窗口隐藏的速度,单位为像素
 //Thread hidethread;//窗口的隐藏或显示线程
 PopupMenu cdpop1,cdpop2;//弹出菜单
 MenuItem cdmenu1,cdmenu2,cdmenu3,cdmenu4,cdmenu5;//弹出菜单项
 SystemTray cdtray=null;//托盘实例
 TrayIcon cdicon=null;//托盘图标
 ImageIcon cdimage;//图片
 LCD_FrameHide(){
  super("类似于迅雷的浮动小小提示窗口");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setSize(cdwidth,cdheight);
  cdimage=new ImageIcon("lcd.jpg");
    
  cdpop1=new PopupMenu();
  cdmenu1=new MenuItem("关于");
  cdmenu2=new MenuItem("退出");
  cdmenu3=new MenuItem("最小化");
  cdmenu4=new MenuItem("最小化并放到托盘");
  cdmenu5=new MenuItem("还原");
  
  cdpop2=new PopupMenu();
  cdicon=new TrayIcon(cdimage.getImage(),"LCD的窗口隐藏测试",cdpop2);
 
  

  cdmenu1.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    JOptionPane.showMessageDialog(null,"我用来测试隐藏功能的");
   }
  });
  cdmenu2.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    System.exit(0);
   }
  });
  cdmenu3.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    setState(Frame.ICONIFIED);
   }
  });
  cdmenu4.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    if(SystemTray.isSupported()){
     cdtray=SystemTray.getSystemTray();
     try{
      cdtray.add(cdicon);
      dispose();
     }
     catch(AWTException ex){
      JOptionPane.showMessageDialog(null,"当前系统不支持系统托盘实例!出错信息:"+ex.toString());
     }
     cdicon.addMouseListener(new MouseListener(){
      public void mouseClicked(MouseEvent e){
       if((e.getModifiers()&InputEvent.BUTTON3_MASK)!=0){
        cdpop2.add(cdmenu1);
        cdpop2.add(cdmenu5);
        cdpop2.add(cdmenu2);
        cdpop2.show(null,e.getX(),e.getY());
       }
      }
      public void mouseExited(MouseEvent e){}
      public void mousePressed(MouseEvent e){}
      public void mouseEntered(MouseEvent e){}
      public void mouseReleased(MouseEvent e){}
     });
     dispose();
    }
   }
  });
  cdmenu5.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    setVisible(true);
    cdtray.remove(cdicon);
   }
  });
  cdpop1.add(cdmenu3);
  cdpop1.add(cdmenu4);
  cdpop1.add(cdmenu1);
  cdpop1.add(cdmenu2);  
  add(cdpop1);
  
 
  addMouseListener(this);
  setLocationRelativeTo(null);
  setUndecorated(true);
  setVisible(true);

   
 }
/* public void actionPerformed(ActionEvent e){
  if((e.getModifiers()&InputEvent.BUTTON3_MASK)!=0){
   cdpop2=new PopupMenu();
   cdpop2.add(cdmenu1);
   cdpop2.add(cdmenu5);
   cdpop2.add(cdmenu2);
  }
 }*/
 public void mouseExited(MouseEvent e){}
 public void mouseReleased(MouseEvent e){
  setVisible(false);
  setLocation((int)(e.getX()-xx+getLocation().getX()),(int)(e.getY()-yy+getLocation().getY()));
  setVisible(true);
 }
 public void mouseEntered(MouseEvent e){}
 public void mouseClicked(MouseEvent e){
  /*  if (e.getClickCount() == 2) { // 鼠标双击
       cdtray.remove(cdicon); // 从系统的托盘实例中移除托盘图标
       setExtendedState(JFrame.NORMAL);
       setVisible(true); // 显示窗口
       toFront();    
     }*/
 }
 public void mousePressed(MouseEvent e){
  xx=e.getX();
  yy=e.getY();
  if((e.getModifiers()&InputEvent.BUTTON3_MASK)!=0){
   cdpop1.show(this,e.getX(),e.getY()); //在指定位置显示右键弹出菜单
  }
 }
 
 
 public void run(){
  //暂时还没有实现在窗口旁边的时候自动隐藏的功能
 }
 
 /*本人的博客:     http://xidige.com

*/
 
 
 public static void main(String a[]){
  new LCD_FrameHide();
 }
}

» 本文链接地址:https://www.xidige.com/60

打开支付宝扫一扫,即可进行扫码打赏哦

扫码支持
扫码打赏,你说多少就多少

标签:

分享到:

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:
评论区0人评论191人参与

电子邮件地址不会被公开。 必填项已用*标注

*

loading

赞助商广告