This article shares the specific code for swing to implement drag and stretching of form for your reference. The specific content is as follows
When using setUndecorated(true) to remove the title bar by JFrame, you have to write the drag and pull functions by yourself.
Below is the renderings. My screenshot software cannot capture the cursor except the system's default cursor, so the changes in cursors in each direction are not reflected in the figure.
The code is as follows:
import javax.swing.*; import java.awt.*; /** * Form drag and stretch*/ public class winReSizeDemo { private JFrame jf; public winReSizeDemo(){ jf=new JFrame(); jf.setUndecorated(true);//Demark the boundary and title bar jf.setLocationRelativeTo(null);//Set the window jf.setSize(400,400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); reSizeEvent dg = new reSizeEvent(jf); /**Add two listeners**/ jf.addMouseListener(dg); jf.addMouseMotionListener(dg); jf.setVisible(true); } public static void main(String [] args){ new winReSizeDemo(); } } import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * Implement stretching and dragging in all directions of the window. */ public class reSizeEvent extends MouseAdapter{ public JFrame jf; private Point prePos,curPos,jfPos; private static final double BREADTH = 15.0;//Border stretch range private int dragType; private static final int DRAG_MOVE = 1; private static final int DRAG_UP = 2; private static final int DRAG_UPLEFT = 3; private static final int DRAG_UPRIGHT = 4; private static final int DRAG_LEFT = 5; private static final int DRAG_RIGHT = 6; private static final int DRAG_BOTTOM = 7; private static final int DRAG_BOTTOMLEFT = 8; private static final int DRAG_BOTTOMRIGHT = 9; public reSizeEvent(JFrame jf){ this.jf = jf; } @Override public void mousePressed(MouseEvent e){ prePos = e.getLocationOnScreen(); } @Override public void mouseMoved(MouseEvent e){ areaCheck(e.getPoint()); } @Override public void mouseDragged(MouseEvent e){ curPos = e.getLocationOnScreen(); jfPos = jf.getLocation(); dragAction(); prePos = curPos; } private void dragAction(){ switch(dragType){ case DRAG_MOVE: jf.setLocation(jfPos.x+curPos.x-prePos.x, jfPos.y+curPos.y-prePos.y); break; case DRAG_UP://x position remains unchanged, y position changes, and Height changes jf.setLocation(jfPos.x, jfPos.y+curPos.y-prePos.y); jf.setSize(jf.getWidth(), jf.getHeight()-(curPos.y-prePos.y)); break; case DRAG_LEFT://y position remains unchanged, x position changes, width changes jf.setLocation(jfPos.x+curPos.x-prePos.x, jfPos.y); jf.setSize(jf.getWidth()-(curPos.x-prePos.x), jf.getHeight()); break; case DRAG_RIGHT://x,y position remains unchanged, width changes jf.setLocation(jfPos.x, jfPos.y); jf.setSize(jf.getWidth()+(curPos.x-prePos.x), jf.getHeight()); break; case DRAG_BOTTOM://x,y position remains unchanged, Height changes jf.setLocation(jfPos.x, jfPos.y); jf.setSize(jf.getWidth(), jf.getHeight()+(curPos.y-prePos.y)); break; case DRAG_UPLEFT://x,y positions change, h and w all change jf.setLocation(jfPos.x+curPos.x-prePos.x, jfPos.y+curPos.y-prePos.y); jf.setSize(jf.getWidth()-(curPos.x-prePos.x), jf.getHeight()-(curPos.y-prePos.y)); break; case DRAG_BOTTOMRIGHT://x,y positions remain unchanged, h and w all change jf.setLocation(jfPos.x, jfPos.y); jf.setSize(jf.getWidth()+(curPos.x-prePos.x), jf.getHeight()+(curPos.y-prePos.y)); break; case DRAG_UPRIGHT://x position remains unchanged, y, w, h changes jf.setLocation(jfPos.x, jfPos.y+curPos.y-prePos.y); jf.setSize(jf.getWidth()+(curPos.x-prePos.x), jf.getHeight()-(curPos.y-prePos.y)); break; case DRAG_BOTTOMLEFT://y remains unchanged, xwh changes jf.setLocation(jfPos.x+curPos.x-prePos.x, jfPos.y); jf.setSize(jf.getWidth()-(curPos.x-prePos.x), jf.getHeight()+(curPos.y-prePos.y)); break; default: break; } } private boolean areaCheck(Point p){ if(p.getX()<=BREADTH && p.getY()<=BREADTH){ dragType = DRAG_UPLEFT; jf.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR)); }else if(p.getX()>BREADTH && p.getX()<(jf.getWidth()-BREADTH) && p.getY()<=BREADTH){ dragType = DRAG_UP; jf.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR)); }else if(p.getX()>=(jf.getWidth()-BREADTH) && p.getY()<=BREADTH){ dragType = DRAG_UPRIGHT; jf.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR)); }else if(p.getX()<=BREADTH && p.getY()<(jf.getHeight()-BREADTH) && p.getY()>BREADTH){ dragType = DRAG_LEFT; jf.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR)); }else if(p.getX()>=(jf.getWidth()-BREADTH) && p.getY()<(jf.getHeight()-BREADTH) && p.getY()>BREADTH){ dragType = DRAG_RIGHT; jf.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR)); }else if(p.getX()<=BREADTH && p.getY()>=(jf.getHeight()-BREADTH)){ dragType = DRAG_BOTTOMLEFT; jf.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR)); }else if(p.getX()>BREADTH && p.getX()<(jf.getWidth()-BREADTH) && p.getY()>=(jf.getHeight()-BREADTH)){ dragType = DRAG_BOTTOM; jf.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR)); }else if(p.getX()>=(jf.getWidth()-BREADTH) && p.getY()>=(jf.getHeight()-BREADTH)){ dragType = DRAG_BOTTOMRIGHT; jf.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR)); }else{ dragType = DRAG_MOVE; jf.setCursor(new Cursor(Cursor.MOVE_CURSOR)); return false; } return true; } }The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.