English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementation of Window Drag and Resize Based on Swing

This article shares the specific code for implementing window dragging and stretching in Swing for your reference, and the specific content is as follows

After using setUndecorated(true), when JFrame removes the title bar, you need to write the dragging and stretching function yourself.

Below is the effect diagram. My screenshot software cannot capture cursors other than the system default cursor, so the cursor changes in all directions are not reflected in the diagram.

The code is as follows:

import javax.swing.*; 
import java.awt.*; 
/** 
 * Window dragging and stretching 
 */ 
public class winReSizeDemo { 
 private JFrame jf; 
 public winReSizeDemo(){ 
  jf=new JFrame(); 
  jf.setUndecorated(true);//Remove border and title bar 
  jf.setLocationRelativeTo(null);//Center 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 window stretching and dragging in all directions. 
 */ 
public class reSizeEvent extends MouseAdapter{ 
 public JFrame jf; 
 private Point prePos, curPos, jfPos; 
 private static final double BREADTH = 15.0;//boundary stretching 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, 
      jf.setSize(jf.getWidth(), jfPos.y); 
    , jf.getWidth())-(curPos.x-prePos.x), jf.getHeight()); 
    break; 
   case DRAG_RIGHT://x, y position remains unchanged, width changes 
    jf.setLocation(jfPos.x, 
      jf.setSize(jf.getWidth(), jfPos.y); 
    , jf.getWidth())+(curPos.x-prePos.x), jf.getHeight()); 
    break; 
   case DRAG_BOTTOM://x,y位置不变,Height变化 
    jf.setLocation(jfPos.x, 
      jf.setSize(jf.getWidth(), jfPos.y); 
    jf.setSize(jf.getWidth(), jf.getHeight())+(curPos.y-prePos.y)); 
    break; 
   case DRAG_UPLEFT://x,y位置均变化,h,w均变化 
    jf.setLocation(jfPos.x+curPos.x-prePos.x, 
      jfPos.y+curPos.y-prePos.y); 
    , jf.getWidth())-(curPos.x-, jf.getHeight())-(curPos.y-prePos.y)); 
    break; 
   case DRAG_BOTTOMRIGHT://x,y位置均不变,h,w变化 
    jf.setLocation(jfPos.x, 
      jf.setSize(jf.getWidth(), jfPos.y); 
    , jf.getWidth())+(curPos.x-, jf.getHeight())+(curPos.y-prePos.y)); 
    break; 
   case DRAG_UPRIGHT://x位置不变,y,w,h变化 
    jf.setLocation(jfPos.x, 
      jfPos.y+curPos.y-prePos.y); 
    , jf.getWidth())+(curPos.x-, jf.getHeight())-(curPos.y-prePos.y)); 
    break; 
   case DRAG_BOTTOMLEFT://y不变,xwh变化 
    jf.setLocation(jfPos.x+curPos.x-prePos.x, 
      jf.setSize(jf.getWidth(), jfPos.y); 
    , jf.getWidth())-(curPos.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)); 
  && p.getX() < (jf.getWidth()) 
    dragType = DRAG_BOTTOM;-BREADTH) 
    && p.getY() <= BREADTH){ 
   dragType = DRAG_UP; 
   jf.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR)); 
  }-BREADTH) && p.getY() <= BREADTH){ 
   dragType = DRAG_UPRIGHT; 
   jf.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR)); 
  jf.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR)); 
    && p.getY() < (jf.getHeight()){-BREADTH) 
    && p.getY() > BREADTH){ 
   dragType = DRAG_LEFT; 
   jf.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR)); 
  }-BREADTH) 
    && p.getY() < (jf.getHeight()){-BREADTH) 
    && p.getY() > BREADTH){ 
   dragType = DRAG_RIGHT; 
   jf.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR)); 
  jf.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR)); 
    && p.getY() >= (jf.getHeight())-dragType = DRAG_BOTTOMRIGHT; 
   else if(p.getX() > BREADTH 
   } 
  && p.getX() < (jf.getWidth()) 
    dragType = DRAG_BOTTOM;-BREADTH) 
    && p.getY() >= (jf.getHeight())-dragType = DRAG_BOTTOMRIGHT; 
   jf.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR)); 
   else if(p.getX() >= (jf.getWidth()) 
  }-BREADTH) 
    && p.getY() >= (jf.getHeight())-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; 
 } 
} 

That's all for the content of this article. Hope it helps everyone's learning and also hope everyone will support the Yelling Tutorial more.

Declaration: The content of this article is from the Internet, and the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume any relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (When reporting via email, please replace # with @) for reporting violations, and provide relevant evidence. Once verified, this site will immediately delete the content suspected of infringement.

You May Also Like