小试菜刀(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 相信 阅读(1143) 评论(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那里  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

不显示applet

常用链接

留言簿(16)

我参与的团队

随笔档案

文章分类

文章档案

新闻档案

相册

swingchina 专业搞Swing的网站

搜索

最新评论

阅读排行榜

评论排行榜