Alas, neither JXLayer nor JXTransformer do work properly. To get an idea what I mean by "do not work properly" try the below test program. If the scaling-factor (at the begin of "ZoomPanelUI") is set to 1.0, things work OK, if I change it to e.g. 0.5 then part of the content is not drawn, elements disappear and reappear almost at random while hovering with the mouse over it and it is not possible to click the intended button.
With JXTransformer I get similar effects and - strange enough - the same Exception in thread "AWT-EventQueue-1" java.lang.InternalError: Win32OSSD_Lock cannot nest locks that I reported already for JGUI (my second append). Seems to be trickier than I ever thought, this generic ZoomPanel.... :-( Michael PS.: my little test program. It draws a couple of buttons and connects two of them with a red line (just to test the drawing). package test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.jdesktop.jxlayer.JXLayer; import org.jdesktop.jxlayer.plaf.AbstractLayerUI; import javax.swing.JApplet; @SuppressWarnings("serial") public class Test extends JApplet { private JPanel viewer; private ArrayList<JButton> buttons = new ArrayList<JButton>(); private Container mainPanel; @Override public void init() { this.mainPanel = getContentPane(); this.mainPanel.setLayout(new BorderLayout()); this.setLayout(new BorderLayout()); this.viewer = new JPanel() { @Override public void paint(final Graphics g) { super.paint(g); addConnections(g); } }; this.viewer.setLayout(new GridLayout(4,4)); for (int i = 0; i < 16; i++) { JButton button = new JButton("button " + i) { { this.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(getText() + " pressed"); } }); } }; this.buttons.add(button); this.viewer.add(button); } JXLayer<JComponent> zoomPanel = new JXLayer<JComponent>(this.viewer, new ZoomPanelUI<JComponent>()); this.mainPanel.add(new JScrollPane(zoomPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); } void addConnections(final Graphics g) { JButton b1 = this.buttons.get(4); JButton b2 = this.buttons.get(11); Point l1 = b1.getLocation(); Dimension s1 = b1.getSize(); Point l2 = b2.getLocation(); Dimension s2 = b2.getSize(); g.setColor(Color.RED); g.drawLine(l1.x + s1.width/2, l1.y + s1.height/2, l2.x + s2.width/2, l2.y + s2.height/2); } @Override public void start() { // empty } static class ZoomPanelUI<V extends JComponent> extends AbstractLayerUI<V> { private double scalingFactor = 1.0; // works // private double scalingFactor = 0.5; // does not work... /** * @return the scalingFactor */ double getScalingFactor() { return this.scalingFactor; } /** * @param scalingFactor the scalingFactor to set */ void setScalingFactor(double scalingFactor) { this.scalingFactor = scalingFactor; } // override paintLayer(), not paint() @Override protected void paintLayer(Graphics2D g2, JXLayer<V> layer) { java.awt.geom.AffineTransform backup = g2.getTransform(); try { g2.scale(this.scalingFactor, this.scalingFactor); super.paintLayer(g2, layer); } finally { g2.setTransform(backup); } } // catch MouseEvents: @Override protected void processMouseMotionEvent(final MouseEvent e, final JXLayer<V> layer) { translateMouseLocation(e); super.processMouseMotionEvent(e, layer); } @Override protected void processMouseEvent(final MouseEvent e, final JXLayer<V> layer) { translateMouseLocation(e); super.processMouseEvent(e, layer); } @Override protected void processMouseWheelEvent(final MouseWheelEvent e, JXLayer<V> layer) { translateMouseLocation(e); super.processMouseWheelEvent(e, layer); } private void translateMouseLocation(final MouseEvent e) { final Point p = e.getPoint(); p.setLocation((int)(p.x / this.scalingFactor), (int)(p.y / this.scalingFactor)); } } } [Message sent by forum member 'mmo18' (mmo18)] http://forums.java.net/jive/thread.jspa?messageID=292710 =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA2D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".