当前位置: 技术问答>java相关
这个最简单的绘图程序错在哪里?
来源: 互联网 发布时间:2015-09-18
本文导语: 我要在窗口的某个指定区域画一个矩形,水平位置由静态变量count决定。 当我关掉此窗口时,要退出程序。 我的代码如下: import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.event.MouseList...
我要在窗口的某个指定区域画一个矩形,水平位置由静态变量count决定。
当我关掉此窗口时,要退出程序。
我的代码如下:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class TestNetPaint
{
public static int count=100;
public static void main(String[] args)throws Exception
{
JFrame myframe=new MyFrame();
myframe.show();
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
setSize(600,400);
Container contentPane=getContentPane();
contentPane.add(new MyPanel());
}
}
class MyPanel extends JPanel
{
TestNetPaint netpaint=new TestNetPaint();
public MyPanel()
{
}
public void paint(Graphics g)
{ g.drawRect(netpaint.count,0,25,25);
System.out.println("MyPanel is running");
}
}
编译,运行。好象没事,在左上角画出一个矩形。
可是,当我拖动(多拖几下,拖快点)窗口,,MyFrame.paint 就会执行,然后会乱画出许多矩形。
问:如何解决?
当我关掉此窗口时,要退出程序。
我的代码如下:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class TestNetPaint
{
public static int count=100;
public static void main(String[] args)throws Exception
{
JFrame myframe=new MyFrame();
myframe.show();
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
setSize(600,400);
Container contentPane=getContentPane();
contentPane.add(new MyPanel());
}
}
class MyPanel extends JPanel
{
TestNetPaint netpaint=new TestNetPaint();
public MyPanel()
{
}
public void paint(Graphics g)
{ g.drawRect(netpaint.count,0,25,25);
System.out.println("MyPanel is running");
}
}
编译,运行。好象没事,在左上角画出一个矩形。
可是,当我拖动(多拖几下,拖快点)窗口,,MyFrame.paint 就会执行,然后会乱画出许多矩形。
问:如何解决?
|
加上一句试试.
public void paint(Graphics g)
{
super.paint(g);//加上这句试试
g.drawRect(netpaint.count,0,25,25);
System.out.println("MyPanel is running");
}
public void paint(Graphics g)
{
super.paint(g);//加上这句试试
g.drawRect(netpaint.count,0,25,25);
System.out.println("MyPanel is running");
}
|
作用是:调用父类的paint(g)方法。原先因为你覆盖了父类的paint(g)方法,当你拖动时MyPanel回调用paint(g)方法,如果不加super.paint(g),则只会多次调用g.drawRect(netpaint.count,0,25,25);所以会出现多个矩形。加上super.paint(g),会先调用父类方法的paint(g),它会重新绘制一个JPanel,原来的矩形就没有了,再调用g.drawRect(netpaint.count,0,25,25),画一个新的举行。