本人初学Java 为什么这个paint方法只执行了1次 不是应该执行20次的吗?
importjava.awt.*;importjavax.swing.*;publicclasshtextendsJFrame{Wdmbmb=null;publicsta...
import java.awt.*;
import javax.swing.*;
public class ht extends JFrame
{
Wdmb mb=null;
public static void main(String[] args)
{
ht lx=new ht();
System.out.println("123");
}
public ht()
{
mb=new Wdmb();
this.add(mb);
this.setSize(400,300);
this.setLocation(300,280);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
for(int i=0;i<20;i++){
this.repaint();
System.out.println("11111111111");
}
}
}
class Wdmb extends JPanel
{
public void paint(Graphics g)
{
int b = 0;
System.out.println(b);
b++;
}
} 展开
import javax.swing.*;
public class ht extends JFrame
{
Wdmb mb=null;
public static void main(String[] args)
{
ht lx=new ht();
System.out.println("123");
}
public ht()
{
mb=new Wdmb();
this.add(mb);
this.setSize(400,300);
this.setLocation(300,280);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
for(int i=0;i<20;i++){
this.repaint();
System.out.println("11111111111");
}
}
}
class Wdmb extends JPanel
{
public void paint(Graphics g)
{
int b = 0;
System.out.println(b);
b++;
}
} 展开
2个回答
展开全部
你的这个repaint 方法不刷新子view 的 视图;
我给你贴出来 方法的内部实现 ;
只刷新你的ht类 的view
/**
* Repaints this component.
* <p>
* If this component is a lightweight component, this method
* causes a call to this component's <code>paint</code>
* method as soon as possible. Otherwise, this method causes
* a call to this component's <code>update</code> method as soon
* as possible.
* <p>
* <b>Note</b>: For more information on the paint mechanisms utilitized
* by AWT and Swing, including information on how to write the most
* efficient painting code, see
* <a href="http://www.oracle.com/technetwork/java/painting-140037.html">Painting in AWT and Swing</a>.
*
* @see #update(Graphics)
* @since JDK1.0
*/
public void repaint() {
repaint(0, 0, 0, width, height);
}
更多追问追答
追问
不好意思,这段代码我一点也没看懂,这个是属于java那一块的知识啊?我回去看看
追答
this.repaint();
刷新的是JFrame 而不是 JPanel
所以 也不会去打印你的 b的值
2016-11-07
展开全部
把int b = 0; 放到方法的外边
for(int i=0;i<20;i++){
//加适当的延时
}
~~~~~~~~~
for(int i=0;i<20;i++){
//加适当的延时
}
~~~~~~~~~
追问
那个b的值无所谓了 我只想 知道为什么paint方法 只被调用了一次? 他不应该被调用20次吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询