1

たとえば、カーソルの周りに20x20pixの領域を含み(ただし、カーソルがアプリのフレームを超えて移動する場合でも)、たとえば小さなJPanelに表示されるJavaで動的ズームボックスを作成する方法はありますか?

Color Chooser プログラムのコンテキストで質問しています。最後に実装する必要がある機能は、ズーム ボックスだけです。

4

2 に答える 2

3

マウスでズーム

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.*;

class ZoomOnMouse {

    public static void main(String[] args) throws AWTException {
        final Robot robot = new Robot();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                final int size = 256;
                final BufferedImage bi = new BufferedImage(
                        size, size, BufferedImage.TYPE_INT_RGB);
                final JLabel gui = new JLabel(new ImageIcon(bi));
                ActionListener zoomListener = new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        PointerInfo pi = MouseInfo.getPointerInfo();
                        Point p = pi.getLocation();
                        BufferedImage temp = robot.createScreenCapture(
                                new Rectangle(p.x-(size/4), p.y-(size/4), 
                                (size/2), (size/2)));
                        Graphics g = bi.getGraphics();
                        g.drawImage(temp, 0, 0, size, size, null);
                        g.dispose();
                        gui.repaint();
                    }
                };
                Timer t = new Timer(40, zoomListener);
                t.start();

                JOptionPane.showMessageDialog(null, gui);

                t.stop();
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}
于 2013-08-10T04:33:24.000 に答える