这几天复习了一下前面Swing组件利用的有些知识,遇到以下几个问题,以前只是知道这样做,因为书上就是这样写的,没有独立思考,现在仔细想了一下,查阅了资料,动手测试了。因此和大家交流一下,若有不足请大家补充奥!
1.paint(),repaint()方法,paintComponent(),方法有何差别
(1) paint()方法里面编写的是你在窗体上绘制的图形,当窗体大小改变时调用该方法。
注:获得获取画布必须在窗体可见之后。
若在窗体上绘制图形时不用paint()方法,就必须在窗体可见之后获得画布之前利用
try{
Thread.sleep(100);
}catch (Exception e) {
}
否则绘制不出图形。原因是:窗体可见要调用硬件资源速度慢,而同时程序仍向下执行获取画布,绘制图形。你想一下,窗体都不可见呢,何来获取画布,绘制图形当然失败。
但是这样处理后窗体大小改变,图形会消失,因此最好用paint()方法。
(2)repaint()方法会执行:update()方法,先刷新屏幕(以背景填充),再调用
paint()方法重画。
一般可以重载update()和paint()方法。
(3)paintComponent()可以通过Api了解一下
引用
也就是说当Swing中的paint方法被调用时,paintComponent、paintBorder、 paintChildren 这三个方法也会被按顺序调用,之所以要按这个顺序调用是为了保证子组件能正确地显示在目前这个组件之上。
所以paintComponent就是本身这个容器自己画出自己组件的方法了。如果只是为了改变本身这个容器中的组件,只需要改写paintComponent方法就可以了,如果还要保留容器中的原本组件就别忘了调用super.paintComponent(g)。如果要改写paint方法来改变本身这个容器的组件,那么也别忘了要调用super.paint(g),不然出来的东西是不包含原组件、原边框和子组件的。
2.AWT的panel与Swing的JPanel区别是:
JPanel支持双缓冲(Double Buffering)功能,在处理动画上较少产生画面闪烁的情况。
3. Graphics 与 Graphics2D的区别
Graphics 类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
Graphics2D 类扩展 Graphics 类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。它是用于在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。
4.Java程序从内部循环跳出外:部循环的方法
以下例子中循环的条件我都省略了,相信大家都可以看的懂。
方法1:内部循环标记法,也是最常用的方法。我们在C,C++中也用到
例int flag=0;
for(){
while(){
if(){ //给出条件
flag=1;
}
break;
}
if(flag==1)
break;
}
这是先跳出内部循环,再跳出外部循环。
方法2:标记外部循环。这个方法简便,但很少有人用,也许人们习惯了通用因为在 C,C++中均不能这样写,只有java中可以。
而且这种方法对3或3重以上的循环从内部直接跳出所有循环
p1:for(){
p2:while(){
do{
if(){
}
break; //只跳出do...while循环
//break p2; //直接跳出到while循环外
//break p1; //直接跳出所有循环
}while()
}
}
这两种方法对continue关键字也适用。[color=blue][/color][size=x-large][/size]