Secara default, Frame atau JFrame sendiri telah mengimplementasikan fungsi memindahkan jendela dengan menyeret title bar dengan mouse.
Namun, jika Anda tidak puas dengan gaya JFrame Java, menyembunyikan bilah judul dan batas, atau cukup menggunakan JWindow secara langsung, lalu bagaimana Anda bisa mencapai tujuan memindahkan jendela dengan menyeret mouse? Pada awalnya, saya hanya menggunakan frame.setLocation(e.getX(), e.getY()) dalam metode mouseDragged Hasilnya, frame terus berkedip ketika saya menyeretnya, dan posisinya terus melompat di layar. Kemudian, saya mencari informasi online dan menemukan jawabannya.
Berikut adalah contoh sederhana yang sekilas mudah dipahami:
paket com.jebysun.test.globalhotkey; impor java.awt.Color; impor java.awt.JLabel; .JWindow; import javax.swing.event.MouseInputListener; /** * Sesuaikan jendela program, dan mouse dapat diseret untuk memindahkan posisinya. * @author Jeby Sun * */ public class MyFrame extends JWindow { private static final long serialVersionUID = 1L; JLabel titleLbl; //Untuk menyetel warna latar belakang, Anda tidak dapat langsung memanggil metode setBackground-nya, tetapi menyetel latar belakangnya warna ContentPane-nya. this.getContentPane().setBackground(new Color(0x99FF66)); this.setBounds(100,100,600,400); this.setLayout(null); titleLbl = new JLabel("Bilah judul jendela yang disesuaikan"); .setBackground(Warna baru(0x66CC00)); titleLbl.setBounds(0, 0, 600, 30); this.add(titleLbl); //kelas penanganan event Mouse MouseEventListener mouseListener = new MouseEventListener(this); .setVisible(true); } /** *Penanganan event mouse* @penulis Jeby Sun * */ class MouseEventListener mengimplementasikan MouseInputListener { Titik asal; //Seret komponen target yang ingin Anda pindahkan dengan mouse Bingkai MyFrame; public void mouseClicked(MouseEvent e) {} /** * Catat titik ketika mouse ditekan*/ @Override public void mousePressed(MouseEvent e) { origin.x = e.getX(); origin.y = e.getY(); } @Override public void mouseReleased(MouseEvent e) {} /** * Saat mouse bergerak ke dalam bilah judul, setel ikon mouse ke ikon seluler* / @Override public void mouseEntered(MouseEvent e) { this.frame.setCursor(Cursor.getPredefinisiCursor(Cursor.MOVE_CURSOR)); Saat mouse bergerak keluar dari bilah judul, atur ikon mouse sebagai penunjuk default */ @Override public void mouseExited(MouseEvent e) { this.frame.setCursor(Cursor.getPredefinisiCursor(Cursor.DEFAULT_CURSOR)); * Seret mouse pada bilah judul Saat menyeret, atur posisi koordinat jendela * Posisi koordinat baru jendela = posisi koordinat sebelum bergerak + (koordinat penunjuk tetikus saat ini - posisi penunjuk saat mouse ditekan) */ @Override public void mouseDragged(MouseEvent e) { Titik p = this.frame.getLocation(); this.frame.setLocation( px + (e.getX() - asal.x), py + (e.getY() - asal. y)); } @Override public void mouseMoved(MouseEvent e) {} } public static void main(String[] args) { myFrame baru() } }