📄 wordpicker.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 + -