小試菜刀(Swing放大鏡)

          哎呀..我那個近視啊...近視的我快連1厘米進的電腦屏幕上的字都看不清了..
           怎么辦呢??當然是用放大鏡啦~~~~~~  攝影機 !!向我這看!!

          效果圖:
              

          開始代碼啦:

           

          package Magnifier;

          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;

          public class Magnifier extends JFrame
          {
              
          private Container container = getContentPane();

              

              private int setCoordinateX;

              
          private int setCoordinateY;

              
          private int absoluteCoordinateX;

              
          private int absoluteCoordinateY;

              
          private int relativeCoordinateXWhenMousePressed;

              
          private int relativeCoordinateYWhenMousePressed;

              
          //標記鼠標是否按下。如果按下則為true,否則為false
              private boolean mousePressedNow;

              
          // 放大鏡尺寸
              private int magnifierSize = 300;

              
          //放大鏡內容面板
              private MagnifierPanel magnifierPanel = new MagnifierPanel(magnifierSize);

              
          //這個窗體就是放大鏡 你可以自己更改這個窗體..
              public Magnifier()
               
          {
                 setUndecorated(
          true); // 這個就是窗口的邊緣 false的話就失效果了
                 setResizable(false); 
                 container.add(magnifierPanel);
                 addMouseListener(
          new MouseFunctions());
                 addMouseMotionListener(
          new MouseMotionFunctions());
                 updateSize(magnifierSize);
                 
          this.setVisible(true);
               }


              
          public static void main(String arg[])
               
          {
              
          // JFrame 
               Magnifier magnifier = new Magnifier();
               magnifier.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               }

              
              
          public void updateSize(int magnifierSize)
               
          {
                  magnifierPanel.setMagnifierSize(magnifierSize 
          + 100);
                  setSize(magnifierSize 
          + 100, magnifierSize + 100);
                  validate();

               }


              
          private class MouseFunctions extends MouseAdapter
               
          {
              
          public void mousePressed(MouseEvent e)
               
          {
                  
          if (e.getClickCount() == 1)
                   
          {// 如果鼠標左鍵點了一下,說明按住了窗體
                   mousePressedNow = true;
                   relativeCoordinateXWhenMousePressed 
          = e.getX();
                   relativeCoordinateYWhenMousePressed 
          = e.getY();
                   }

               }


              
          public void mouseReleased(MouseEvent e)
               
          {
                   mousePressedNow 
          = false;
               }

              }


              
          private class MouseMotionFunctions extends MouseMotionAdapter
               
          {
               
          public void mouseDragged(MouseEvent e)
               
          {
                
          if (mousePressedNow == true)
                
          {// 如果此時鼠標按下了,說明在拖拽窗體
                 absoluteCoordinateX = Magnifier.this
                    .getLocationOnScreen().x
                     
          + e.getX();
                 absoluteCoordinateY 
          = Magnifier.this
                  .getLocationOnScreen().y
                  
          + e.getY();
                 setCoordinateX 
          = absoluteCoordinateX
                  
          - relativeCoordinateXWhenMousePressed;
                 setCoordinateY 
          = absoluteCoordinateY
                      
          - relativeCoordinateYWhenMousePressed;
                 magnifierPanel.setMagnifierLocation(setCoordinateX,
                      setCoordinateY);
                 setLocation(setCoordinateX, setCoordinateY);
                }

               }

               }

          }


          class MagnifierPanel extends JPanel
          {
              
          private Image screenImage;

              
          private int magnifierSize;

              
          private int locationX;

              
          private int locationY;

              
          private Robot robot;

               
          public MagnifierPanel(int magnifierSize)
               
          {
                 
          try
                    
          {
                      robot 
          = new Robot();
                    }

                 
          catch (AWTException e){
                 }

               

                 screenImage = robot.createScreenCapture(new Rectangle(00, Toolkit
                   .getDefaultToolkit().getScreenSize().width, Toolkit
                   .getDefaultToolkit().getScreenSize().height));
                
                
          this.magnifierSize = magnifierSize;
               }


              
          public void setMagnifierLocation(int locationX, int locationY)
               
          {
              
          //X坐標
               this.locationX = locationX;
              
          //Y坐標
               this.locationY = locationY;
               repaint();        
          // 注意重畫控件
               }


              
          public void setMagnifierSize(int magnifierSize)
               
          {
               
          this.magnifierSize = magnifierSize;
               }


              
          public void paintComponent(Graphics g)
               
          {
               
          super.paintComponent((Graphics2D) g);
              
          // 關鍵處理代碼
               g.drawImage(
                 screenImage,                 
          // 要畫的圖片
                 0,                    // 目標矩形的第一個角的x坐標     
                 0,                    // 目標矩形的第一個角的y坐標
                 magnifierSize,                 // 目標矩形的第二個角的x坐標
                 magnifierSize,                 // 目標矩形的第二個角的y坐標
                 locationX + (magnifierSize / 4),     // 源矩形的第一個角的x坐標
                 locationY + (magnifierSize / 4),    // 源矩形的第一個角的y坐標
                 locationX + (magnifierSize / 4 * 3),     // 源矩形的第二個角的x坐標
                 locationY + (magnifierSize / 4 * 3),     // 源矩形的第二個角的y坐標
                 this
               );
             }

          }


          posted on 2008-05-21 18:09 相信 閱讀(1155) 評論(4)  編輯  收藏 所屬分類: Swing文章

          評論

          # re: 小試菜刀(Swing放大鏡) 2008-05-21 19:11 lzw

          功能還不錯,就是效果比較差。  回復  更多評論   

          # re: 小試菜刀(Swing放大鏡) 2008-05-21 19:12 相信

          一起學習...我也是個Swing菜鳥  回復  更多評論   

          # re: 小試菜刀(Swing放大鏡) 2008-08-23 13:25 張相

          不錯啊!以后要學習學習!  回復  更多評論   

          # re: 小試菜刀(Swing放大鏡) 2010-06-06 22:06 大師傅

          這個是有問題的 就是只能截取一次屏幕 我新開個界面什么的 顯示還是原來的 主要就在于Robot那里  回復  更多評論   

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          不顯示applet

          常用鏈接

          留言簿(16)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          swingchina 專業搞Swing的網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 哈尔滨市| 玉屏| 措勤县| 安庆市| 普兰店市| 朝阳区| 习水县| 高台县| 繁峙县| 永城市| 湄潭县| 绵竹市| 开江县| 同德县| 历史| 唐山市| 武邑县| 房产| 舟曲县| 临潭县| 诸城市| 无锡市| 青龙| 梧州市| 滨海县| 尉犁县| 威海市| 垣曲县| 普格县| 锡林浩特市| 嘉荫县| 卓尼县| 陆良县| 永泰县| 江油市| 大厂| 朝阳区| 尚志市| 乳山市| 南平市| 陆川县|