JAVA_swing抖动窗口,要求在拖动窗口位置后能在新位置进行抖动!请看代码...

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA_swing抖动窗口,要求在拖动窗口位置后能在新位置进行抖动!请看代码...相关的知识,希望对你有一定的参考价值。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class shake extends JFrame
private int w = 400;
private int h = 150;
private JButton button1;

public shake()
setTitle("抖动");
setSize(w, h);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口是否可以关闭
setLocationRelativeTo(null);
setVisible(true);
chushihuazujian();
paintComponents(getGraphics());
paintAll(getGraphics());


public void chushihuazujian()

button1 = new JButton("抖动");
button1.setBounds(150, 100, 60, 20);
button1.addMouseListener(new MouseListener()
//这里有省略
public void mouseClicked(MouseEvent e)
//在这里写代码

);
this.add(button1);


public static void main(String[] args)
new shake();

参考技术A 好难

对tkinter简单封装了窗口拖动和点击获取鼠标位置的方法

from tkinter import Tk
from tkinter import *

class PfTk(Tk):
    """
    Tk的扩展
    增加了对鼠标左键拖动的支持
    封装了部分功能方法
    """

    def __init__(self, title='PfTk', width=600, height=300, bg='red'):
        """
        初始化Tk
        :param title: str: 窗口标签(默认: PfTk)
        :param width: int: 宽度(默认: 300)
        :param height: height: 高度(默认: 300)
        :param bg: str: 背景色(默认: white)
        """
        # 调用父类构造方法
        super().__init__()
        # 设置窗口大小与居中
        self.geometry(f'widthxheight+'
                      f'int((self.winfo_screenwidth() - width) / 2)+'
                      f'int((self.winfo_screenheight() - height) / 2)')
        # 标题
        self.title(title)
        # 背景色
        self.config(bg=bg)
        # 鼠标拖动
        self.__motion = False
        # 鼠标点击坐标
        self.__clickX, self.__clickY = 0, 0
        # 绑定鼠标点击事件
        self.bind("<Button-1>", self.__onClick)
        # 绑定鼠标拖动事件
        self.bind('<B1-Motion>', self.__onMotion)
        self.initWidgets()

    def initWidgets(self):
        self.button_sync = Button(self.master, text='测试按钮', command=self.sync_file)
        self.button_sync.pack()
    def sync_file(self):
        print("sync_file")

    def bd(self, tf):
        """
        设置窗口边框
        :param tf: bool: 是否带有边框(默认: True)
        :return:
        """
        self.overrideredirect(not tf)

    def topmost(self, tf):
        """
        设置窗口置顶
        :param tf: bool: 是否置顶(默认: False)
        :return:
        """
        self.wm_attributes("-topmost", tf)

    def alpha(self, f):
        """
        设置窗口透明度
        :param f: float: 透明度(默认: 1.0)
        :return:
        """
        self.attributes('-alpha', f)

    def colorAlpha(self, color):
        """
        设置窗口某一颜色完全透明
        :param color: str: 颜色
        :return:
        """
        self.attributes('-transparentcolor', color)

    def move(self, tf):
        """
        设置窗口拖动
        :param tf: bool: 是否可以拖动(默认: False)
        :return:
        """
        self.__motion = tf

    def disable(self, tf):
        """
        设置窗口功能
        :param tf: bool: 是否具备功能(默认: True)
        :return:
        """
        self.attributes("-disabled", tf)

    def show(self, tf):
        """
        设置窗口显示
        :param tf: 是否显示(默认: True)
        :return:
        """
        if tf:
            self.deiconify()
        else:
            self.withdraw()

    def __onClick(self, event):
        """
        窗口鼠标左键点击事件
        :param event: obj: 鼠标左键点击事件
        :return:
        """
        print("记录鼠标左键点击坐标")
        print(event)
        # 记录鼠标左键点击坐标
        self.__clickX = event.x
        self.__clickY = event.y

    def __onMotion(self, event):
        """
        窗口鼠标拖动事件
        :param event: obj: 鼠标拖动事件
        :return:
        """
        print(event)
        if self.__motion:
            self.geometry(f'self.winfo_width()xself.winfo_height()+'
                          f'int(self.winfo_x() + event.x - self.__clickX)+'
                          f'int(self.winfo_y() + event.y - self.__clickY)')



# root = Tk()
PfTk().mainloop()

# root.mainloop()

以上是关于JAVA_swing抖动窗口,要求在拖动窗口位置后能在新位置进行抖动!请看代码...的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 窗口滚动后的可拖动位置问题

在Word中,按住啥后拖动鼠标就可以改变窗口最大化的位置

electron 在windows下窗口为啥不能拖动

WPF window 子窗口反馈效果(抖动/阴影渐变)

Qt设置窗口可拖动

是否正在拖动外部窗口?