English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo ho condiviso il codice specifico per l'esecuzione di trascinamento e ridimensionamento della finestra con Swing, per riferimento, il contenuto dettagliato è il seguente
Dopo aver utilizzato setUndecorated(true), quando JFrame rimuove la barra del titolo, è necessario scrivere la funzione di trascinamento e ridimensionamento.
Di seguito è riportata l'immagine di esempio, il mio software di screenshot non è in grado di catturare i cursori oltre al cursore predefinito del sistema, quindi le variazioni dei cursori in diverse direzioni non sono rappresentate nell'immagine
Il codice è il seguente:
import javax.swing.*; import java.awt.*; /** * Trascinamento e ridimensionamento della finestra */ public class winReSizeDemo { private JFrame jf; public winReSizeDemo(){ jf=new JFrame(); jf.setUndecorated(true); // rimuove i bordi e la barra del titolo jf.setLocationRelativeTo(null); // finestra centrata jf.setSize(400,400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); reSizeEvent dg = new reSizeEvent(jf); /**Aggiungi due listener**/ 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; /** /* Implementa la trazione e lo spostamento delle finestre in tutte le direzioni */ */ public class reSizeEvent extends MouseAdapter{ public JFrame jf; private Point prePos, curPos, jfPos; private static final double BREADTH = 15.0; // Spazio di trazione dei margini 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位置不变,y位置变化,并且Height变化 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位置不变,x位置变化,width变化 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位置不变,width变化 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() - 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)); } && p.getY() < (jf.getHeight() - BREADTH) && p.getY() > BREADTH{ dragType = DRAG_LEFT; jf.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR)); } && p.getY() < (jf.getHeight() - BREADTH) && p.getY() > BREADTH{ dragType = DRAG_RIGHT; jf.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR)); } && p.getY() >= (jf.getHeight() - BREADTH)) dragType = DRAG_BOTTOMLEFT; jf.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR)); } && p.getX() < (jf.getWidth() - BREADTH)) && p.getY() >= (jf.getHeight() - BREADTH)) dragType = DRAG_BOTTOM; jf.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR)); } && p.getY() >= (jf.getHeight() - BREADTH)) dragType = DRAG_BOTTOMRIGHT; jf.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR)); } dragType = DRAG_MOVE; jf.setCursor(new Cursor(Cursor.MOVE_CURSOR)); return false; } return true; } }
Questo è tutto il contenuto dell'articolo, speriamo che sia utile per il tuo studio e ti preghiamo di supportare e fare eco al tutorial.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito volontariamente dagli utenti di Internet e caricato autonomamente, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la veridicità, il sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.