问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java中repaint方法具体怎么用?

发布网友 发布时间:2022-04-12 15:06

我来回答

2个回答

懂视网 时间:2022-04-12 19:28

access数据库的使用大概有两大部分,一是数据的计算与处理,像数据表、查询这些都是来完成数据处理工作的,他们会按照我们的需要完成数据的计算和处理,形成数据信息以供参考;二是用户界面(UI)的制作,这一部分虽然不是核心,但是也非常重要,。因为对于

access数据库的使用大概有两大部分,一是数据的计算与处理,像数据表、查询这些都是来完成数据处理工作的,他们会按照我们的需要完成数据的计算和处理,形成数据信息以供参考;二是用户界面(UI)的制作,这一部分虽然不是核心,但是也非常重要,。因为对于一般用户来讲,不会懂得怎样去建立查询等等这些工作,他们所需要的只是点点按钮就能得到必要的信息,所以,我们需要制作大量的窗体来引导用户进行数据库的操作,以得到他们所需的信息。所以对于一个好的数据库应用系统来讲,这两大部分缺一不可。

在建立窗体,引导用户使用的过程中,经常会遇到这样的问题:有时候用户按下某个命令按钮,当程序开始执行那个按钮所关联的程序时,由于涉及到大量的计算工作,所以电脑运行会变慢,在Access中会表现为屏幕没有任何反应,时间稍长,就会让人感觉是不是死机了?所以,在这种情况下,如果有提示框来告诉用户电脑此时在做什么会比较好,另外这样也可以感觉时间短些,因为没有任何变化的等待会让人感觉更加漫长!

要完成这个即时信息显示窗口,我们首先想到的就是在程序的某一部分加上一段代码,这段代码打开一个新的窗口,窗口中会有相关文字,如“程序正在运行,请稍等……”等等,代码也很简单,在Access中就是

……

DoCmd.OpenForm "wait"

Forms!Wait!lblwait.Caption = "程序正在运行,请稍等……"

……

其中,wait是窗体(Form)的名字,lblwait是窗体中的一个标签(Label)控件的名称,程序运行到省略号这里时,会打开wait窗口,然后把标签控件的名称改为“程序正在运行,请稍等……”。

可是当你真正运行这段程序代码时,会发现效果并不是你想象的那样,wait窗口确实出来了,但是上面只是一片白色区域,没有任何文字,最初你可能觉得是自己的电脑运行慢,显示不出来,但是即使你换到最快的电脑上来运行,结果还会是这样,岂不郁闷?!

这个时候,就轮到Repaint方法大显身手了,将上面的代码稍作修改,如下面这样:

……

DoCmd.OpenForm "wait"

Forms!Wait!lblwait.Caption = "程序正在运行,请稍等……"

Forms!Wait.Repaint

……

再运行一下,就可以看到窗口正常显示出来提示了。

之后,你可以在需要的地方都加上这段代码,把其中的文字换换,就可以在程序的运行过程当中实时提示用户程序在做什么了!

道理其实也很简单,就是在程序运行过程当中,不会实时的更新屏幕显示,这样会加快程序运行的速度,所以在设计到大量计算时,程序就不会有任何显示更新,像死机了一样,但是加入了Repaint方法就会强制更新屏幕显示,就会让我们动态看到程序运行状况了。

热心网友 时间:2022-04-12 16:36

你得加一个线程就可以循环播放了 可以用Timer
我把你的代码改动了一下已经可以实现你要的效果了

public class LoadingPage extends JFrame {
DrawLoadingAnimation drawLoadingAnimation;

public LoadingPage() {
ImageIcon[] imageIcons = {
new ImageIcon("D:\\新建文件夹\\0.jpg"),
new ImageIcon("D:\\新建文件夹\\1.jpg"),
new ImageIcon("D:\\新建文件夹\\3.jpg")
};
drawLoadingAnimation = new DrawLoadingAnimation(imageIcons);
this.add(drawLoadingAnimation);
this.setSize(300, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("");
this.setVisible(true);

Timer timer = new Timer(200, e -> {
drawLoadingAnimation.index = (drawLoadingAnimation.index + 1) % imageIcons.length;
repaint(1000,0,0,this.getWidth(),this.getHeight());
});
timer.start();

}

static class DrawLoadingAnimation extends JPanel {
int index = 0;
ImageIcon[] imageIcons;
public DrawLoadingAnimation(ImageIcon[] imageIcons) {
this.imageIcons = imageIcons;
}

@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(imageIcons[index].getImage(), 0, 0, this.getWidth(),this.getHeight(),null);
}
}

public static void main(String[] args) {
new LoadingPage();
}
}追问非常感谢您!效果已经实现了,但是我还有两个问题想问一下。
第一个是 drawLoadingAnimation.index = (drawLoadingAnimation.index + 1) % loadingImages.length;

这句话不太明白实现形式
第二个是我想让这个动画加载完一遍之后就跳出timer,请问怎么实现呢?
总之非常感谢!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三星8英寸平板电脑三星8英寸平板电脑哪个型号好 长城第一墩文化景区-讨赖河吊桥地址在哪里? 珲春景点简介 夏季需要加防冻液吗? 抽血感染艾滋病的概率 清洁剂的作用有哪些 日化产品抗菌抑菌效果怎样 杠杆高低有什么区别 姓赵取什么名字好 赵姓男孩女孩取名字大全 赵姓好听顺口的女孩名字女孩姓赵有气质名字 如花似玉大姑娘,十二生肖是那个肖,? 如花似玉啊开什么动物 交通事故对方全责我方保险公司不赔偿应该怎么办? 如花似玉打一动物 【合集】恐怖片排行榜前十名电影豆瓣,【在线观看】免费百度云资源 盘点豆瓣评分恐怖片排行榜前十名,【免费高清】在线观看百度网盘资源 半精梳棉用什么英文符号代表? 邮政定期存款最低限额是多少 单位定期留存金额最低多少? 芈月传女医挚扮演者演过武则天秘史里面的韩国夫人吗 武则天秘史上韩国太太死得那一集是那一集? 武则天秘史刘晓庆第几集冲进门和皇上和姐姐谈话的 武则天秘史中给韩国夫人名分的是哪集? 《武则天秘史》中的韩国夫人是谁演的 武则天秘史:皇上有没有厌弃,韩国夫人? 武则天秘史里的韩国夫人什么时候没他的戏? 为什么用了repaint之后没有反应,是不是还要重写一个repaint方法 我家电脑经常IP被更改,这是怎么回事。 大腿肌肉拉伤怎么快好起来? 请问大腿肌肉反复拉伤怎么办 p家是什么牌子? 一个P开头的意大利包 方框里有个p是啥包包品牌 p开头的国际名牌 5G网络安全吗? 5G智慧生活安全如何保障? 5G安全还是3G安全,注意你的脑袋 河南药学单招考什么内容 2002年河南各大专单招院校怎么考。考什么内容。 河南高职单招不需要考文化课的学校 河南什么单招院校不考数学 河南省单招不考英语的学校 美的空调控制板不能用怎么办? 河南省中职生单招报考高速铁路客运服务专业需要多少分 河南艺术职业学院2022年单招考试视觉传达设计要职业技能测试嘛 剑与远征工具箱在哪可以找到? 剑与远征在哪里有模拟抽卡功能啊? 为什么pdf文件用qq邮箱发送,添加到正文会显示一堆乱码?怎么解决这个问题? 剑与远征3倍速太慢,有方法加速吗? 剑与远征在哪可以下载加速版?