Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is a full mouse adapter i am using for a long time now:</p> <pre><code>import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * @see http://stackoverflow.com/a/12456113/909085 */ public class WindowResizeAdapter extends MouseAdapter implements SwingConstants { private boolean resizing = false; private int prevX = -1; private int prevY = -1; private int resizeSide = 0; public static void install ( Component component, int resizeSide ) { WindowResizeAdapter wra = new WindowResizeAdapter ( resizeSide ); component.addMouseListener ( wra ); component.addMouseMotionListener ( wra ); } public WindowResizeAdapter ( int resizeSide ) { super (); this.resizeSide = resizeSide; } public void mousePressed ( MouseEvent e ) { if ( SwingUtilities.isLeftMouseButton ( e ) ) { resizing = true; } prevX = e.getXOnScreen (); prevY = e.getYOnScreen (); } public void mouseDragged ( MouseEvent e ) { if ( prevX != -1 &amp;&amp; prevY != -1 &amp;&amp; resizing ) { Window w = SwingUtilities.getWindowAncestor ( e.getComponent () ); Rectangle rect = w.getBounds (); Dimension dim; boolean undecorated; if ( w instanceof JDialog ) { dim = ( ( JDialog ) w ).getContentPane ().getPreferredSize (); undecorated = ( ( JDialog ) w ).isUndecorated (); } else if ( w instanceof JFrame ) { dim = ( ( JFrame ) w ).getContentPane ().getPreferredSize (); undecorated = ( ( JFrame ) w ).isUndecorated (); } else { dim = w.getPreferredSize (); undecorated = true; } // Checking for minimal width and height int xInc = e.getXOnScreen () - prevX; int yInc = e.getYOnScreen () - prevY; if ( undecorated ) { if ( resizeSide == SwingConstants.NORTH_WEST || resizeSide == SwingConstants.WEST || resizeSide == SwingConstants.SOUTH_WEST ) { if ( rect.width - xInc &lt; dim.width ) { xInc = 0; } } else if ( resizeSide == SwingConstants.NORTH_EAST || resizeSide == SwingConstants.EAST || resizeSide == SwingConstants.SOUTH_EAST ) { if ( rect.width + xInc &lt; dim.width ) { xInc = 0; } } if ( resizeSide == SwingConstants.NORTH_WEST || resizeSide == SwingConstants.NORTH || resizeSide == SwingConstants.NORTH_EAST ) { if ( rect.height - yInc &lt; dim.height ) { yInc = 0; } } else if ( resizeSide == SwingConstants.SOUTH_WEST || resizeSide == SwingConstants.SOUTH || resizeSide == SwingConstants.SOUTH_EAST ) { if ( rect.height + yInc &lt; dim.height ) { yInc = 0; } } } // Resizing window if any changes are done if ( xInc != 0 || yInc != 0 ) { if ( resizeSide == SwingConstants.NORTH_WEST ) { w.setBounds ( rect.x + xInc, rect.y + yInc, rect.width - xInc, rect.height - yInc ); } else if ( resizeSide == SwingConstants.NORTH ) { w.setBounds ( rect.x, rect.y + yInc, rect.width, rect.height - yInc ); } else if ( resizeSide == SwingConstants.NORTH_EAST ) { w.setBounds ( rect.x, rect.y + yInc, rect.width + xInc, rect.height - yInc ); } else if ( resizeSide == SwingConstants.WEST ) { w.setBounds ( rect.x + xInc, rect.y, rect.width - xInc, rect.height ); } else if ( resizeSide == SwingConstants.EAST ) { w.setBounds ( rect.x, rect.y, rect.width + xInc, rect.height ); } else if ( resizeSide == SwingConstants.SOUTH_WEST ) { w.setBounds ( rect.x + xInc, rect.y, rect.width - xInc, rect.height + yInc ); } else if ( resizeSide == SwingConstants.SOUTH ) { w.setBounds ( rect.x, rect.y, rect.width, rect.height + yInc ); } else if ( resizeSide == SwingConstants.SOUTH_EAST ) { w.setBounds ( rect.x, rect.y, rect.width + xInc, rect.height + yInc ); } prevX = e.getXOnScreen (); prevY = e.getYOnScreen (); } } } public void mouseReleased ( MouseEvent e ) { resizing = false; } } </code></pre> <p>Just use its "install" method to add the window resize behavior to any Component. The resizeSide variable is used to define which side of the window should be resized (for example SwingConstants.SOUTH_EAST will force the component to resize bottom right corner of the window).</p> <p><strong>Edit:</strong> You might also want to modify the code for your specific case so that drag (resize) will start only from some specific area on the component. Just modify the mousePressed method to do that.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload