⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wordpicker.java

📁 用java 实现屏幕取词技术
💻 JAVA
字号:
/* * WordPicker.java * * Created on 2007-7-4, 16:26:16 * * To change this template, choose Tools | Templates * and open the template in the editor. */package dyno.swing.beans;import java.awt.Component;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionListener;import java.lang.reflect.Method;import java.util.ArrayList;import javax.swing.JComponent;/** * * @author William Chen */public class WordPicker implements MouseMotionListener {    private static Method paintComponentMethod;    static {        try {            paintComponentMethod = JComponent.class.getDeclaredMethod("paintComponent", Graphics.class);            paintComponentMethod.setAccessible(true);        } catch (Exception e) {        }    }    private JComponent component;    private ArrayList<Text> texts;    public WordPicker(JComponent component) {        this.component = component;        Image offImage = component.createVolatileImage(component.getWidth(), component.getHeight());        if (offImage != null) {            ProxyGraphics pg = new ProxyGraphics((Graphics2D) offImage.getGraphics());            ArrayList<JComponent> dbcomponents = new ArrayList<JComponent>();            clearDoubleBuffer(component, dbcomponents);            paintComponent(pg);            resetDbl(dbcomponents);            texts = pg.getTexts();        }    }    private void paintComponent(Graphics g) {        try {            paintComponentMethod.invoke(component, g);        } catch (Exception e) {            e.printStackTrace();        }    }    public void mouseDragged(MouseEvent e) {    }    public void mouseMoved(MouseEvent e) {        int x = e.getX();        int y = e.getY();        for (Text text : texts) {            if (x >= text.getX() && x <= text.getX() + text.getWidth() && y >= text.getY() && y <= text.getY() + text.getHeight()) {                if (!text.isVisible()) {                    DictPopupManager.show(text, component);                }                return;            }        }        DictPopupManager.hide();    }    private void resetDbl(ArrayList<JComponent> dbcomponents) {        for (JComponent jc : dbcomponents) {            jc.setDoubleBuffered(true);        }    }    private void clearDoubleBuffer(Component c, ArrayList<JComponent> dbcomponents) {        if (c instanceof JComponent) {            JComponent jc = (JComponent) c;            if (jc.isDoubleBuffered()) {                jc.setDoubleBuffered(false);                dbcomponents.add(jc);            }            int count = jc.getComponentCount();            for (int i = 0; i < count; i++) {                Component comp = jc.getComponent(i);                clearDoubleBuffer(comp, dbcomponents);            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -