import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;import javax.swing.JFrame;
import javax.swing.JPanel;
public class Draw extends JFrame
{
Graphics g;
public Draw()
{
super("Draw");
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(300,400));
pack();
setVisible(true);
g = getGraphics();
}
/* public void paint(Graphics g)
{
g.drawRect(10, 30, 30, 40);
}*/
public void shows()
{
if(null != g)
{
g.drawRect(10, 30, 30, 40);
}
g.dispose();
}
public static void main(String[] args)
{
Draw test = new Draw();
test.shows();
}
}
这段简单的代码,如果把shows函数注释掉,并且在主函数里不调用shows那么用paint方法来画这个矩形是没问题的
但是我把paint方法注释掉之后,采用shows方法,然后在主函数里面调用shows就出现了奇怪的现象:这个矩形闪了一下就不见了
请问是怎么回事呢?
import java.awt.Dimension;
import java.awt.Graphics;import javax.swing.JFrame;
import javax.swing.JPanel;
public class Draw extends JFrame
{
Graphics g;
public Draw()
{
super("Draw");
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(300,400));
pack();
setVisible(true);
g = getGraphics();
}
/* public void paint(Graphics g)
{
g.drawRect(10, 30, 30, 40);
}*/
public void shows()
{
if(null != g)
{
g.drawRect(10, 30, 30, 40);
}
g.dispose();
}
public static void main(String[] args)
{
Draw test = new Draw();
test.shows();
}
}
这段简单的代码,如果把shows函数注释掉,并且在主函数里不调用shows那么用paint方法来画这个矩形是没问题的
但是我把paint方法注释掉之后,采用shows方法,然后在主函数里面调用shows就出现了奇怪的现象:这个矩形闪了一下就不见了
请问是怎么回事呢?
{
static Graphics g;
public Draw()
{
super("Draw");
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(300,400));
pack();
setVisible(true);
g = getGraphics();
} public static void shows()
{
if(null != g)
{
g.drawRect(10, 30, 30, 40);
}
g.dispose();
}
public static void main(String[] args)
{
Draw test = new Draw();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Draw.shows();
}
});
}
}
还有就是最好不要用getGraphics()方法得到的graphic去绘制东西,所有的绘制都应该在paint方法传进来的那个graphic上绘,