Frame oder JFrame selbst hat standardmäßig die Funktion implementiert, das Fenster durch Ziehen der Titelleiste mit der Maus zu verschieben.
Wenn Sie jedoch mit dem JFrame-Stil von Java nicht zufrieden sind, die Titelleiste und die Ränder ausblenden oder JWindow einfach direkt verwenden, wie können Sie dann den Zweck erreichen, das Fenster durch Ziehen mit der Maus zu verschieben? Zuerst habe ich einfach „frame.setLocation(e.getX(), e.getY())“ in der Methode „mouseDragged“ verwendet. Dadurch flackerte der Rahmen ständig, wenn ich ihn zog, und die Position sprang ständig auf dem Bildschirm. Später suchte ich online nach Informationen und fand die Antwort.
Hier ist ein einfaches Beispiel, das auf einen Blick leicht zu verstehen ist:
Paket com.jebysun.test.globalhotkey; java.awt.Cursor importieren; java.awt.event.MouseEvent importieren; javax.swing importieren .JWindow; import javax.swing.event.MouseInputListener; /** * Passen Sie das Programmfenster an, und die Maus kann gezogen werden, um seine Position zu verschieben. * @author Jeby Sun * */ public class MyFrame erweitert JWindow { private static final long serialVersionUID = 1L; JLabel titleLbl; //Um die Hintergrundfarbe festzulegen, können Sie die Methode setBackground nicht direkt aufrufen, aber den Hintergrund festlegen Farbe seines ContentPane . this.getContentPane().setBackground(new Color(0x99FF66)); this.setLayout(null); titleLbl = new JLabel("Customized window title bar"); .setBackground(new Color(0x66CC00)); titleLbl.setBounds(0, 0, 600, 30); this.add(titleLbl); //Maus-Ereignisbehandlungsklasse MouseEventListener(this); titleLbl.addMouseListener(mouseListener); .setVisible(true); } /** *Maus-Ereignisbehandlung* @author Jeby Sun * */ class MouseEventListener { Point origin; //Ziehen Sie die Zielkomponente, die Sie mit der Maus verschieben möchten. public MouseEventListener(MyFrame) { this.frame = new Point( } @Override public void mouseClicked(MouseEvent e) {} /** * Zeichnen Sie den Punkt auf, an dem die Maus gedrückt wird*/ @Override public void mousePressed(MouseEvent e) { origin.x = e.getX(); origin.y = e.getY(); } @Override public void mouseReleased(MouseEvent e) {} /** * Wenn sich die Maus in der Titelleiste bewegt, setzen Sie das Maussymbol auf das mobile Symbol* / @Override public void mouseEntered(MouseEvent e) { this.frame.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)} /** * Wenn sich die Maus aus der Titelleiste bewegt, legen Sie das Maussymbol als Standardzeiger fest. * Ziehen Sie die Maus über die Titelleiste. Legen Sie beim Ziehen die Koordinatenposition des Fensters fest. * Die neue Koordinatenposition des Fensters = die Koordinatenposition vor dem Verschieben + (die aktuellen Koordinaten des Mauszeigers – die Position des Zeigers beim Bewegen der Maus gedrückt wird) */ @Override public void mouseDragged(MouseEvent e) { Point p = this.frame.getLocation(); this.frame.setLocation( px + (e.getX() - origin.x), py + (e.getY() - origin. y)); } @Override public void mouseMoved(MouseEvent e) {} } public static void main(String[] args) { new MyFrame(} }