这个应该不是线程的问题,但对Swing组件的操作应该放到事件分发线程中,因为Swing组件的操作都是线程不安全的。这个估计是因为你画完Rectangle和line后,窗口又自动进行了刷新。窗口刷新后,就会重绘canvas。在重绘canvas时,不会调到你的drawRect和drawLine代码,所以Rectangle和line就消失了。你尝试定义一个新类extends canvas,然后override paint方法,试下吧。
解决方案 »
- 垃圾回收,一个全局变量在 局部方法中位置Null,当该方法return 时
- 有高手可以帮我看下吗?中间有Clear按钮清空两个文本内容。Copy将Source文本内容复制到Target中。摁Close结束程序。但添加监听器时遇到了困难。
- 有一个关于生产者和消费者的关系的考试问题,希望大家帮忙一下,谢谢
- jstl中的if语句
- 参数Component 为什么final不加会抱错
- 加密随机
- 接口(哪位老大讲讲咯!)
- 关于看书,请教高手!
- 一个简单的Java程序!我不知道错在哪里还望指点!
- 郁闷,告诉自己要有耐心,诸位仁兄、仁姐帮个忙(在线)。
- 请教关于NetBean 7的JUnit插件问题,谢谢!
- 求大神帮忙看不知道 没想明白哪出的问题JAVA
import java.awt.Frame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Component;public class Ace extends Canvas{
public static void main(String[] arg)
{
new Ace();
}
public Ace()
{
Frame frame = new Frame("This is Title");
frame.setBounds(0, 0, 800, 800);
frame.setVisible(true);
this.setSize(400, 400);
this.setLocation(50, 50);
frame.add(this);
Graphics graphics = this.getGraphics();
graphics.drawRect(50, 50, 200, 100);
graphics.drawLine(50, 50, 500, 500);
this.paint(graphics);
}
}
package org.csdn.temp;import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Component;import javax.swing.JComponent;
import javax.swing.JFrame;public class Ace {
public void createAndShowUI(){
JFrame frame = new JFrame("This is Title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 300);
/*
* look at here!!!
*/
Component c1 = new Component() {
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
g.drawRect(50, 50, 200, 100);
g.drawLine(0, 0, 100, 100);
}
};
c1.setSize(new Dimension(300,300));
frame.add(c1);
frame.setVisible(true);
// frame.setLocationRelativeTo(null);
}
public static void main(String[] arg) {
Ace ace = new Ace();
ace.createAndShowUI();
}
}
import java.awt.EventQueue;
import java.awt.Graphics;import javax.swing.JFrame;
public class Ace {
public static void main(String[] arg){
EventQueue.invokeLater(new Runnable(){ @Override
public void run() {
JFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}class MyFrame extends JFrame{
private static final long serialVersionUID = -1337786324275247741L; public MyFrame(){
setTitle("this title");
setSize(800, 800);
Canvas canvas = new Canvas(){ @Override
public void paint(Graphics graphics) { super.paint(graphics);
graphics.drawRect(120, 100, 400, 200); graphics.drawLine(40, 40, 400, 400);
}
};
canvas.setSize(600, 600);
add(canvas);
}
}