<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FAdvanced_Graphics%2FLayer</id>
		<title>Java/Advanced Graphics/Layer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FAdvanced_Graphics%2FLayer"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Advanced_Graphics/Layer&amp;action=history"/>
		<updated>2026-04-21T14:38:59Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Advanced_Graphics/Layer&amp;diff=7577&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Advanced_Graphics/Layer&amp;diff=7577&amp;oldid=prev"/>
				<updated>2010-06-01T06:48:16Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:48, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Advanced_Graphics/Layer&amp;diff=7576&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Advanced_Graphics/Layer&amp;diff=7576&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Draw With Layer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
import no.geosoft.cc.geometry.Geometry;&lt;br /&gt;
import no.geosoft.cc.geometry.Matrix4x4;&lt;br /&gt;
import no.geosoft.cc.graphics.*;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * G demo program. Demonstrates:&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;lt;ul&amp;gt;&lt;br /&gt;
 * &amp;lt;li&amp;gt;Positional feature among sibling GObjects.&lt;br /&gt;
 * &amp;lt;li&amp;gt;Simple selection interaction to choose front object&lt;br /&gt;
 * &amp;lt;li&amp;gt;Dynamic style changes&lt;br /&gt;
 * &amp;lt;li&amp;gt;Matrix4x4 for geometry generation&lt;br /&gt;
 * &amp;lt;li&amp;gt;Text elements and annotation strategy&lt;br /&gt;
 * &amp;lt;li&amp;gt;Device relative graphic object&lt;br /&gt;
 * &amp;lt;/ul&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LayeredPane Layout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2007, Romain Guy&lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   * Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *   * Redistributions in binary form must reproduce the above&lt;br /&gt;
 *     copyright notice, this list of conditions and the following&lt;br /&gt;
 *     disclaimer in the documentation and/or other materials provided&lt;br /&gt;
 *     with the distribution.&lt;br /&gt;
 *   * Neither the name of the TimingFramework project nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT&lt;br /&gt;
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,&lt;br /&gt;
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&lt;br /&gt;
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.AlphaComposite;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.Transparency;&lt;br /&gt;
import java.awt.event.ruponentEvent;&lt;br /&gt;
import java.awt.event.ruponentListener;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseMotionAdapter;&lt;br /&gt;
import java.awt.geom.Area;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.beans.PropertyChangeEvent;&lt;br /&gt;
import java.beans.PropertyChangeListener;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import javax.imageio.ImageIO;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JLayeredPane;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JLayeredPane;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JSlider;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;br /&gt;
import javax.swing.event.ChangeEvent;&lt;br /&gt;
import javax.swing.event.ChangeListener;&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Romain Guy &amp;lt;romain.guy@mac.ru&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
public class LayeredPaneLayout extends JFrame {&lt;br /&gt;
    private JLayeredPane layeredPane;&lt;br /&gt;
    private Loupe loupe;&lt;br /&gt;
    &lt;br /&gt;
    public LayeredPaneLayout() {&lt;br /&gt;
        super(&amp;quot;Layered Pane Layout&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        layeredPane = new JLayeredPane();&lt;br /&gt;
        addLayersControl();&lt;br /&gt;
        loadImagesInLayers();&lt;br /&gt;
        createLoupe();&lt;br /&gt;
        &lt;br /&gt;
        setSize(540, 350);&lt;br /&gt;
        setLocationRelativeTo(null);&lt;br /&gt;
        setResizable(false);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
            public void run() {&lt;br /&gt;
                new LayeredPaneLayout().setVisible(true);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    private void loadImagesInLayers() {&lt;br /&gt;
        layeredPane.setLayout(new FlowLayout());&lt;br /&gt;
        &lt;br /&gt;
        for (int i = 2; i &amp;lt;= 5; i++) {&lt;br /&gt;
            String name = &amp;quot;photo&amp;quot; + i + &amp;quot;.jpg&amp;quot;;&lt;br /&gt;
            URL url = getClass().getResource(name);&lt;br /&gt;
            Icon icon = new ImageIcon(url);&lt;br /&gt;
            JLabel label = new JLabel(icon);&lt;br /&gt;
            &lt;br /&gt;
            layeredPane.add(label,&lt;br /&gt;
                    (Integer) (JLayeredPane.DEFAULT_LAYER + (i - 1) * 2));&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        add(layeredPane);&lt;br /&gt;
    }&lt;br /&gt;
    private void addLayersControl() {&lt;br /&gt;
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING));&lt;br /&gt;
        &lt;br /&gt;
        JComboBox layerSelection = new JComboBox(new String[] {&lt;br /&gt;
            &amp;quot;Layer 0&amp;quot;, &amp;quot;Layer 1&amp;quot;, &amp;quot;Layer 2&amp;quot;, &amp;quot;Layer 3&amp;quot;, &amp;quot;Layer 4&amp;quot; &lt;br /&gt;
        });&lt;br /&gt;
        layerSelection.addActionListener(new ActionListener() {&lt;br /&gt;
            public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
                JComboBox layerSelection = (JComboBox) actionEvent.getSource();&lt;br /&gt;
                int layerId = layerSelection.getSelectedIndex();&lt;br /&gt;
                layeredPane.setLayer(loupe,&lt;br /&gt;
                        (Integer) (JLayeredPane.DEFAULT_LAYER + layerId * 2 + 1));&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        panel.add(new JLabel(&amp;quot;Loupe Layer: &amp;quot;));&lt;br /&gt;
        panel.add(layerSelection);&lt;br /&gt;
        &lt;br /&gt;
        JSlider zoomSelection = new JSlider(1, 16, 2);&lt;br /&gt;
        zoomSelection.setPaintTicks(true);&lt;br /&gt;
        zoomSelection.setSnapToTicks(true);&lt;br /&gt;
        zoomSelection.setPaintLabels(true);&lt;br /&gt;
        zoomSelection.addChangeListener(new ChangeListener() {&lt;br /&gt;
            public void stateChanged(ChangeEvent changeEvent) {&lt;br /&gt;
                JSlider zoomSelection = (JSlider) changeEvent.getSource();&lt;br /&gt;
                loupe.setZoomLevel(zoomSelection.getValue());&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        &lt;br /&gt;
        panel.add(Box.createHorizontalStrut(24));&lt;br /&gt;
        panel.add(new JLabel(&amp;quot;Zoom: &amp;quot;));&lt;br /&gt;
        panel.add(new JLabel(&amp;quot;1&amp;quot;));&lt;br /&gt;
        panel.add(zoomSelection);&lt;br /&gt;
        panel.add(new JLabel(&amp;quot;16&amp;quot;));&lt;br /&gt;
        &lt;br /&gt;
        add(panel, BorderLayout.NORTH);&lt;br /&gt;
    }&lt;br /&gt;
    private void createLoupe() {&lt;br /&gt;
        loupe = new Loupe(layeredPane);&lt;br /&gt;
        Dimension size = loupe.getPreferredSize();&lt;br /&gt;
        layeredPane.add(loupe,&lt;br /&gt;
                (Integer) (JLayeredPane.DEFAULT_LAYER + 1));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2007, Romain Guy&lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   * Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *   * Redistributions in binary form must reproduce the above&lt;br /&gt;
 *     copyright notice, this list of conditions and the following&lt;br /&gt;
 *     disclaimer in the documentation and/or other materials provided&lt;br /&gt;
 *     with the distribution.&lt;br /&gt;
 *   * Neither the name of the TimingFramework project nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS&lt;br /&gt;
 * &amp;quot;AS IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR&lt;br /&gt;
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT&lt;br /&gt;
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,&lt;br /&gt;
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT&lt;br /&gt;
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&lt;br /&gt;
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Romain Guy &amp;lt;romain.guy@mac.ru&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
class Loupe extends JComponent {&lt;br /&gt;
    private BufferedImage loupeImage;&lt;br /&gt;
    private Point loupeLocation = new Point(0, 0);&lt;br /&gt;
    private JLayeredPane layeredPane;&lt;br /&gt;
    private BufferedImage buffer;&lt;br /&gt;
    private int zoomLevel = 2;&lt;br /&gt;
    public Loupe(JLayeredPane layeredPane) {&lt;br /&gt;
        this.layeredPane = layeredPane;&lt;br /&gt;
        loadImages();&lt;br /&gt;
        &lt;br /&gt;
        layeredPane.addMouseMotionListener(new MouseMotionAdapter() {&lt;br /&gt;
            public void mouseMoved(MouseEvent mouseEvent) {&lt;br /&gt;
                Point location = mouseEvent.getPoint();&lt;br /&gt;
                location.translate(-getWidth() / 2, -getHeight() / 2);&lt;br /&gt;
                setLocation(location);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        addComponentListener(new ComponentListener() {&lt;br /&gt;
            public void componentHidden(ComponentEvent componentEvent) {&lt;br /&gt;
                resetBuffer();&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            public void componentMoved(ComponentEvent componentEvent) {&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            public void componentResized(ComponentEvent componentEvent) {&lt;br /&gt;
                resetBuffer();&lt;br /&gt;
            }&lt;br /&gt;
           &lt;br /&gt;
            public void componentShown(ComponentEvent componentEvent) {&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    public int getZoomLevel() {&lt;br /&gt;
        return this.zoomLevel;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setZoomLevel(int zoom) {&lt;br /&gt;
        if (zoom &amp;lt; 1) {&lt;br /&gt;
            zoom = 1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        int oldZoom = this.zoomLevel;&lt;br /&gt;
        this.zoomLevel = zoom;&lt;br /&gt;
        firePropertyChange(&amp;quot;zoomLevel&amp;quot;, oldZoom, this.zoomLevel);&lt;br /&gt;
        &lt;br /&gt;
        repaint();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Override&lt;br /&gt;
    public Dimension getPreferredSize() {&lt;br /&gt;
        return new Dimension(loupeImage.getWidth(),&lt;br /&gt;
                loupeImage.getHeight());&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void resetBuffer() {&lt;br /&gt;
        buffer = null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void loadImages() {&lt;br /&gt;
        try {&lt;br /&gt;
            loupeImage = ImageIO.read(getClass().getResource(&amp;quot;loupe.png&amp;quot;));&lt;br /&gt;
        } catch (IOException ex) {&lt;br /&gt;
            ex.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Override&lt;br /&gt;
    protected void paintComponent(Graphics g) {&lt;br /&gt;
        if (buffer == null) {&lt;br /&gt;
            buffer = createBuffer();&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        Graphics2D g2 = buffer.createGraphics();&lt;br /&gt;
        g2.setComposite(AlphaComposite.Clear);&lt;br /&gt;
        g2.fillRect(0, 0, buffer.getWidth(), buffer.getHeight());&lt;br /&gt;
        g2.setComposite(AlphaComposite.Src);&lt;br /&gt;
        Point location = getLocation();&lt;br /&gt;
        location.translate(getWidth() / 2, getHeight() / 2);&lt;br /&gt;
        &lt;br /&gt;
        int myLayer = layeredPane.getLayer(this);&lt;br /&gt;
        for (int i = myLayer - 1; i &amp;gt;= 2; i -= 2) {&lt;br /&gt;
            Component[] components = layeredPane.getComponentsInLayer(i);&lt;br /&gt;
            for (Component c : components) {&lt;br /&gt;
                if (c.getBounds().contains(location)) {&lt;br /&gt;
                    g2.translate(c.getX(), c.getY());&lt;br /&gt;
                    c.paint(g2);&lt;br /&gt;
                    g2.translate(-c.getX(), -c.getY());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        g2.dispose();&lt;br /&gt;
        &lt;br /&gt;
        if (zoomLevel &amp;gt; 1) {&lt;br /&gt;
            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_INTERPOLATION,&lt;br /&gt;
                    RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);&lt;br /&gt;
            Shape clip = g.getClip();&lt;br /&gt;
            Area newClip = new Area(clip);&lt;br /&gt;
            newClip.intersect(new Area(new Ellipse2D.Double(6.0, 6.0, 138.0, 138.0)));     &lt;br /&gt;
            g.setClip(newClip);&lt;br /&gt;
            g.drawImage(buffer,&lt;br /&gt;
                    (int) (-getX() * zoomLevel - getWidth() * 0.5 * (zoomLevel - 1)),&lt;br /&gt;
                    (int) (-getY() * zoomLevel - getHeight() * 0.5 * (zoomLevel - 1)),&lt;br /&gt;
                    buffer.getWidth() * zoomLevel,&lt;br /&gt;
                    buffer.getHeight() * zoomLevel, null);&lt;br /&gt;
            g.setClip(clip);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        g.drawImage(loupeImage, 0, 0, null);&lt;br /&gt;
    }&lt;br /&gt;
    private BufferedImage createBuffer() {&lt;br /&gt;
        GraphicsEnvironment local = GraphicsEnvironment.getLocalGraphicsEnvironment();&lt;br /&gt;
        GraphicsDevice device = local.getDefaultScreenDevice();&lt;br /&gt;
        GraphicsConfiguration config = device.getDefaultConfiguration();&lt;br /&gt;
        &lt;br /&gt;
        Container parent = getParent();&lt;br /&gt;
        return config.createCompatibleImage(parent.getWidth(), parent.getHeight(),&lt;br /&gt;
                Transparency.TRANSLUCENT);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>