利用Swing画出动态的滑动条

注:
1、 jFrame.addMouseMotionListener(new MouseMotionAdapter() {
这个类才能执行mouseMovedmouseDragged(鼠标按住不放)这两个方法才能生效。
使用 jFrame.addMouseListener(new MouseAdapter() { 去执行上面两个方法应该是不会生效。但是除了上面两个方法,其他的重写方法可以生效。

制作思路:
利用绘画方法去画出来一个空心固定长宽的长方形和一个长度动态变化的实心长方形,以达到滑动效果。
ps:这是最佳解决方法了,不用指望Swing自带的滑动条,泪的教训。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

public class A extends JPanel{
   static Point point;      // 用来定位鼠标位置
   static int str;          // 用来显示进度

   A(){
        point = new Point(0, 0);  // 初始化鼠标位置。
        str = 0;
   }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        
        // 画一个固定长宽空心的长方形,然后画一个实心的长方形,但是长度随着鼠标移动而移动
        g.drawRect(100,100,200,30);
        g.fillRect(100,100, point.x-100,30);
        g.drawString("进度为:"+str+"%",100,50);
    }

    public static void main(String[] args)
    {

        JFrame jFrame = new JFrame();
        jFrame.setBounds(100,100,500,500);
        A a = new A();
        jFrame.add(a);
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//直接退出
        jFrame.addMouseListener(new MouseAdapter() {
            
        });
        jFrame.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                super.mouseMoved(e);
            }

            // 鼠标按住不放,不断监测鼠标位置然后不断更新point.x和str以达到动态变化的效果
            @Override
            public void mouseDragged(MouseEvent e) {
                super.mouseDragged(e);
                
                            point = new Point(e.getX(), e.getY());
                            if (e.getX()>=300) point.x=300;
                            str = (point.x-100)/2;
                            System.out.println("x:" + point.x + "y:" + point.y);
                            a.repaint(); // 重绘
                            
            }
        });
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值