English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 기사에서는 Swing을 사용하여 창의 드래그와 확장을 구현하는 구체적인 코드를 공유했습니다. 참고할 수 있는 내용입니다.
setUndecorated(true)를 사용한 후 JFrame의 제목 표시줄이 제거되면, 스스로 드래그와 확장 기능을 작성해야 합니다.
이하는 효과 그림입니다. 제截图 소프트웨어는 시스템 기본 포인터 외의 포인터를 캡처할 수 없기 때문에, 그림에서는 모든 방향의 포인터 변화가 반영되지 않습니다.
코드는 다음과 같습니다:
import javax.swing.*; import java.awt.*; /** * 창의 드래그와 확장 */ public class winReSizeDemo { private JFrame jf; public winReSizeDemo(){ jf=new JFrame(); jf.setUndecorated(true);//광고 경계와 제목 표시줄 제거 jf.setLocationRelativeTo(null);//창을 중앙에 배치합니다 jf.setSize(400,400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); reSizeEvent dg = new reSizeEvent(jf); /**두 리스너를 추가합니다**/ 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; /** * 창의 모든 방향에서 확장 및 드래그를 구현합니다。 */ public class reSizeEvent extends MouseAdapter{ public JFrame jf; private Point prePos,curPos,jfPos; private static final double BREADTH = 15.0;//경계 확장 범위 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() 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; } }
이것이 이 문서의 전체 내용입니다. 많은 도움이 되길 바라며, 많은 지원을 해 주시기를 바랍니다. 또한,呐喊 교본을 많이 지원해 주시기 바랍니다.
고지사항: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자가 모두 소유하고 있으며, 인터넷 사용자가 자발적으로 기여하고 자체적으로 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집되지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 문제가 의심되는 내용이 있으면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보내는 이메일에서 #을 @으로 변경하십시오. 신고를 하고 관련 증거를 제공하시면, 실제로 확인되면, 이 사이트는 즉시 의심스러운 저작권 내용을 삭제합니다。)