使用 JPanel 时,结果与我预期的不一样
While using JPanel, the result is not same that I expected
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。
因为
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
它只发生在帧调整大小时。
调整框架大小时,您的 paintComponent 将使用变量 "st" 的旧值再次调用。
这是因为,对于 class "tpanel","st" 是一个全局变量,并且直到您的 JPanel 保持打开状态,控制才会从 "tpanel" class 退出。
所以很简单,它只是打印在paintComponent的不同函数调用之间调用的全局变量的值。
希望这会有所帮助。 :-)
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。
因为
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
它只发生在帧调整大小时。 调整框架大小时,您的 paintComponent 将使用变量 "st" 的旧值再次调用。 这是因为,对于 class "tpanel","st" 是一个全局变量,并且直到您的 JPanel 保持打开状态,控制才会从 "tpanel" class 退出。
所以很简单,它只是打印在paintComponent的不同函数调用之间调用的全局变量的值。
希望这会有所帮助。 :-)