日期:2014-05-20  浏览次数:20794 次

eclipse画的图形显示了一瞬间就消失了
这段代码都能通过,可就是一个奇怪的现象,Run之后 这个矩形和线条 都只显示了一瞬间就消失了,就剩下白板画布Canvas 和 Frame 了,

import java.awt.Canvas;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Ace

{

public static void main(String[] arg){

new Ace();

}

public Ace(){

JFrame frame = new JFrame("this title");

frame.setLayout(new FlowLayout());

frame.setVisible(true);

frame.setBounds(0, 0, 800, 800);

Canvas canvas = new Canvas();

frame.add(canvas);

canvas.setSize(600, 600);

canvas.setBackground(Color.WHITE);

Graphics graphics = canvas.getGraphics();

graphics.setColor(Color.BLACK);

graphics.drawRect(120, 100, 400, 200);

graphics.drawLine(40, 40, 400, 400);

}

}

------解决方案--------------------
这个应该不是线程的问题,但对Swing组件的操作应该放到事件分发线程中,因为Swing组件的操作都是线程不安全的。

这个估计是因为你画完Rectangle和line后,窗口又自动进行了刷新。窗口刷新后,就会重绘canvas。在重绘canvas时,不会调到你的drawRect和drawLine代码,所以Rectangle和line就消失了。

你尝试定义一个新类extends canvas,然后override paint方法,试下吧。
------解决方案--------------------
我把你的代码按照我的习惯重新编排了下




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();

}

}