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

Implémentation de la glisser-déposer et de l'extension de fenêtre basée sur Swing

Dans cet article, j'ai partagé le code spécifique à la réalisation du glisser-déposer et de l'extension de la fenêtre avec Swing, à titre de référence. Le contenu spécifique est le suivant

Après l'utilisation de setUndecorated(true), après que JFrame a supprimé la barre de titre, il faut écrire la fonction de glisser-déposer et d'extension soi-même.

Voici l'effet visuel, mon logiciel de capture d'écran ne peut pas capturer les curseurs autres que les curseurs par défaut du système, donc les changements des curseurs dans toutes les directions ne sont pas représentés dans l'image.

Le code est le suivant :

import javax.swing.*; 
import java.awt.*; 
/** 
 * Glisser-déposer et extension de la fenêtre 
 */ 
public class winReSizeDemo { 
 private JFrame jf; 
 public winReSizeDemo(){ 
  jf=new JFrame(); 
  jf.setUndecorated(true);//Supprimer les bordures et la barre de titre 
  jf.setLocationRelativeTo(null);//Centrer la fenêtre 
  jf.setSize(400,400); 
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  reSizeEvent dg = new reSizeEvent(jf); 
  /**Ajouter deux écouteurs**/ 
  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; 
/** 
 * Mettre en œuvre l'extension et le glisser-déposer de la fenêtre dans toutes les 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 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 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 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位置不变,Height变化 
    jf.setLocation(jfPos.x, 
      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.setSize(jf.getWidth()-(curPos.x-prePos.x), jf.getHeight()-(curPos.y-prePos.y)); 
    break; 
   case DRAG_BOTTOMRIGHT://x,y位置均不变,h,w变化 
    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位置不变,y,w,h变化 
    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不变,xwh变化 
    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)); 
  && 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()-BREADTH)){ 
   else if(p.getX()>BREADTH 
   } 
  && p.getX()<(jf.getWidth() 
    dragType = DRAG_BOTTOM;-BREADTH) 
    && p.getY()>=jf.getHeight()-BREADTH)){ 
   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; 
 } 
} 

Voici la totalité du contenu de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel d'alarme.

Déclaration : le contenu de cet article est extrait du réseau, propriété du propriétaire original, contribué et téléversé par les utilisateurs d'Internet, ce site n'en possède pas la propriété, n'a pas été édité par l'homme, ni n'assume la responsabilité des responsabilités juridiques pertinentes. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer