package javademo.swing.draw.d1;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 通过生成新的Canvas来实现显示不同的图像
* @author Dharma
* @created 2009-3-14
*/
public class ShapeTest
{
/**
* @param args
*/
public static void main(String[] args)
{
JFrame frame = new ShapeTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
@SuppressWarnings("serial")
class ShapeTestFrame extends JFrame implements ActionListener
{
private Button button = null;
private PaintPanel canvas;
public ShapeTestFrame()
{
setTitle("Shape test");
setLayout(null); // 必需要有此语句!
button = new Button("Start");
button.addActionListener(this);
add(button);
button.setBounds(10, 1, 100, 26);
canvas = new PaintPanel();
add(canvas);
canvas.setBounds(10, 35, 420, 420);
pack();
setSize(430, 480);
}
@Override
public void actionPerformed(ActionEvent e)
{
canvas.addBox();
}
}
class PaintPanel extends JPanel
{
private static final long serialVersionUID = 1L;
public PaintPanel()
{
super();
setLayout(null); // 一定要加上这一句,新增的Box才不会在“最小化”再“还原”后在屏幕上乱跑
setSize(440, 440);
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
// 画网络
for (int i = 0; i <= 400; i = i + 20)
{
g.drawLine(0, i, 400, i);
}
for (int j = 0; j <= 400; j = j + 20)
{
g.drawLine(j, 0, j, 400);
}
}
public void addBox()
{
int i = new Random().nextInt(20 * 20);
int row = i / 20;
int column = i - (row * 20);
Box box = new Box(Color.BLACK);
this.add(box);
box.setBounds(20 * row + 1, column * 20 + 1, 18, 18);
}
}
class Box extends Canvas
{
private static final long serialVersionUID = 1L;
private Color color;
Box(Color color)
{
setSize(20, 20);
this.color = color;
}
public void paint(Graphics g)
{
g.setColor(color);
g.fillOval(0, 0, 18, 18);
}
}