ตามค่าเริ่มต้น Frame หรือ JFrame เองได้ใช้ฟังก์ชันการย้ายหน้าต่างโดยการลากแถบชื่อเรื่องด้วยเมาส์
อย่างไรก็ตาม เมื่อคุณไม่พอใจกับสไตล์ JFrame ของ Java ให้ซ่อนแถบหัวเรื่องและเส้นขอบ หรือใช้ JWindow โดยตรง แล้วคุณจะบรรลุวัตถุประสงค์ในการย้ายหน้าต่างด้วยการลากเมาส์ได้อย่างไร ในตอนแรก ฉันเพียงแค่ใช้ frame.setLocation(e.getX(), e.getY()) ในเมธอด mouseDragged เป็นผลให้เฟรมยังคงกะพริบเมื่อฉันลากมัน และตำแหน่งก็ยังคงกระโดดบนหน้าจอ ต่อมาฉันค้นหาข้อมูลออนไลน์และพบคำตอบ
นี่เป็นตัวอย่างง่ายๆ ที่จะเข้าใจได้ง่ายโดยสรุป:
แพ็คเกจ com.jebysun.test.globalhotkey; นำเข้า java.awt.Cursor; นำเข้า java.awt.Point; นำเข้า java.awt.JLabel; .JWindow; import javax.swing.event.MouseInputListener; /** * ปรับแต่งหน้าต่างโปรแกรมและสามารถลากเมาส์เพื่อเลื่อนตำแหน่งได้ * @author Jeby Sun * */ public class MyFrame ขยาย JWindow { private static สุดท้าย serialVersionUID = 1L; JLabel titleLbl; public MyFrame() { //หากต้องการตั้งค่าสีพื้นหลัง คุณไม่สามารถเรียกใช้เมธอด setBackground ได้โดยตรง แต่ตั้งค่าพื้นหลัง สีของ ContentPane this.getContentPane().setBackground(สีใหม่(0x99FF66)); this.setBounds(100,100,600,400); this.setLayout(null); titleLbl = new JLabel("แถบชื่อหน้าต่างที่กำหนดเอง"); .setBackground(สีใหม่ (0x66CC00)); titleLbl.setBounds(0, 0, 600, 30); this.add (titleLbl); // คลาสการจัดการเหตุการณ์ของเมาส์ MouseEventListener = new MouseEventListener (สิ่งนี้); .setVisible(true); } /** *การจัดการเหตุการณ์เมาส์* @ผู้เขียน Jeby Sun * */ class MouseEventListener ใช้ MouseInputListener { Point origin; // ลากส่วนประกอบเป้าหมายที่คุณต้องการย้ายด้วยเมาส์ MyFrame frame; public void mouseClicked(MouseEvent e) {} /** * บันทึกจุดเมื่อกดเมาส์*/ @Override public void mousePressed(MouseEvent e) { origin.x = e.getX(); origin.y = e.getY(); } @Override public void mouseReleased(MouseEvent e) {} /** * เมื่อเมาส์เลื่อนไปที่แถบชื่อเรื่อง ให้ตั้งค่าไอคอนเมาส์ไปที่ไอคอนมือถือ* / @Override โมฆะสาธารณะ mouseEntered(MouseEvent e) { this.frame.setCursor(Cursor.getPredefedCursor(Cursor.MOVE_CURSOR) } /** * เมื่อเมาส์เคลื่อนออกจากแถบหัวเรื่อง ให้ตั้งค่าไอคอนเมาส์เป็นตัวชี้เริ่มต้น */ @Override public void mouseExited(MouseEvent e) { this.frame.setCursor(Cursor.getPredefedCursor(Cursor.DEFAULT_CURSOR)); * ลากเมาส์บนแถบชื่อเรื่อง เมื่อลาก ให้กำหนดตำแหน่งพิกัดของหน้าต่าง * ตำแหน่งพิกัดใหม่ของหน้าต่าง = ตำแหน่งพิกัดก่อนเคลื่อนที่ + (พิกัดปัจจุบันของตัวชี้เมาส์ - ตำแหน่งของตัวชี้เมื่อเมาส์ ถูกกด) */ @Override โมฆะสาธารณะ mouseDragged(MouseEvent e) { จุด p = this.frame.getLocation(); this.frame.setLocation( px + (e.getX() - origin.x), py + (e.getY() - origin. y)); } @Override โมฆะสาธารณะ mouseMoved(MouseEvent e) {} } โมฆะสาธารณะหลัก (String[] args) { new MyFrame();