加上一句试试.
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");
}
解决方案 »
- Java GUI学习与嵌入式数据库
- 抛出异常的实现问题
- 是否有Java Thread,3rd Edtion的中文版?
- 现在公司需要一个用户管理系统,包括用户登录、管理、密码查询、权限角色管理等功能,一个大问题
- 初学者的疑惑:java类库集与包在概念和应用上有什么区别?
- 怎样使用log4j管理日志啊?
- 请教用JBuilder中的Database Pilot工具连接Sybase数据问题!!!
- 初学者,选择什么样的教科书?请大家谈谈、
- 请教高人一个Java Socket的长连接代码部署的问题。
- class类文件直接修改反编译
- 很奇怪的现象!!
- 请问Java的各位仁兄那个Java 2 Runtime Environment在哪里安装的?
也许应该重载paintComponent()方法.关于Swing的订制绘制,在
<java 2 图形技术卷II Swing>这本书中有下面一段建议,也许有所帮助:(下面一段是我从书上抄下来的^_^)在SWing组件中定制绘制复杂,是因为SWing组件本身是AWT容器。下面是绘制SWing组件的一些基本原则:
Ù 如果需要控制组件本身的绘制过程,但又想用缺省的操作来绘制该组件的边框和子组件,则重载Jcomponent.paintComponent()
Ù 如果需要完全控制组件、其边框和其子组件的绘制过程,请重载Jcomponent.paint()方法
Ù 在重载Jcomponent.paintComponent()方法中调用super.paintComponent()以确保UI代表获得擦除不透明组件的背景和绘制的机会
Ù 重载paintComponent方法时,不要绘制到组件的边衬中
Ù 在计算最小、最大和首选尺寸时,要考虑组件的边衬大小
Ù 如果SWing在更新时闪烁,则应该确保组件是双缓存的,而不是重载其他更新的方法
为什么我从word里边粘贴过来就成这样了,我原来可是写的1,2,3,...
不过没有关系啦,希望不影响你理解:)
首先绘制组件(就是paintCompont()方法),然后绘制组件的边框,在绘制组件的子组件.调用的顺序确保组件擦除背景.
2.如果组件有UI代表,则paintCompont方法调用该代表的Update方法,确保为不透明组件擦除背景,然后绘制组件.
3.书上的建议是:在重载paintComponent方法中调用super.paintComponent 方法以擦除组件的背景(书上一直这么说:)我也就这么做了^_^.当然对于透明组件,则是不必要的.
4.一般情况下,重载paintComponent()方法,而不是paint().尽管paint里边还会调用它.但还是看看我上面贴出来的那几条建议.(又是书上说的:)panel是不透明组件(Swing默认的好像都是不透明的),我想也许需要在绘制前,最好重新擦除背景.(注意"也许":),我自己这么想的)
class MyPanel extends JPanel
{
TestNetPaint netpaint=new TestNetPaint();
public MyPanel()
{
//this.setOpaque(false); -----------> 1
}
public void paint(Graphics g)
{
//super.paint(g);--------------------> 2
int i = (int)(Math.random()*100);------->3
g.drawRect(netpaint.count,i,25,25);------->4
System.out.println("MyPanel is running");
}
我加了3和4,是为了每次的矩形出现在一个随机的位置,便于观察.
这样执行,并用鼠标拖动窗口边界,以改变窗口大小.这时,很明显,几乎每次都在花一个新矩形.而你原来的现象只是在"拖动很快,很多"的情况下出现.我想主要是你画在一个固定的地方,所以一些情况并没有完全观察到.然后看如果加上2,执行正确.
同样的,如果加上1(而不加2这句),执行好像也是正确的.这个似乎和那句
在重载paintComponent方法中调用super.paintComponent 方法以擦除组件的背景
比较吻合.