注:
1、 jFrame.addMouseMotionListener(new MouseMotionAdapter() {
这个类才能执行mouseMoved
与mouseDragged(鼠标按住不放)
这两个方法才能生效。
使用 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(); // 重绘
}
});
}
}