package getcm;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test {
public static void main( String[] args ) {
tpanel panel = new tpanel();
JFrame app = new JFrame();
app.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
app.add(panel);
app.setSize(250, 250);
app.setVisible(true);
}
}
class tpanel extends JPanel {
int st = 0;
public void paintComponent(Graphics g) {
for (int h = 0; h < 2; h++) {
System.out.println(st);
st += 1;
}
}
}
我认为这个结果应该是0,1但是在Eclipse中,打印的数据是0,1,2,3。
我有一个原因是变量st不能在paintComponent中产生,我必须得到结果0,1。(只获得paintComponent一次)
请帮助我得到结果0,1。
我不知道为什么这段代码会打印0,1,2,3而不是0,1。
答案 0 :(得分:0)
由于
paintComponent
每次面板涂漆时都会多次调用
它会打印一些数字0,1用于第一次涂漆,2,3打印第二次
如果您编辑这样的代码,它将打印
class tpanel extends JPanel {
int st = 0;
public void paintComponent(Graphics g) {
for (int h = 0; h < 2; h++) {
System.out.println(st);
st += 1;
}
Systen.out.println("paintComponent completed");
}
}
输出:
0
1
paintComponent completed
2
3
paintComponent completed
答案 1 :(得分:0)
仅在帧大小调整时才会发生。 调整框架大小时,将使用变量&#34; st&#34;的旧值再次调用paintComponent。 这是因为,对于班级&#34; tpanel&#34;,&#34; st&#34;是一个全局变量,直到您的JPanel保持打开状态,控件才会退出&#34; tpanel&#34;类。
所以简单地说它只打印在paintComponent的不同函数调用之间调用的全局变量的值。
希望这会有所帮助。 : - )