图案绘制主要是通过在JPanel类的子类中,重写paint()方法,并在该方法中使用Graphics2D类中的方法来实现的。
先上个效果图:
—ps:其实很简单,真不知道该怎么描述了。。。
在main方法中绘制一个显示图案的窗口:
JFrame window = new DrawFrame();
window.setTitle("绘制图形"); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(100,100,600,400);
window.setVisible(true);
写一个类,去继承JFrame,把图案添加到窗口中
class DrawFrame extends JFrame{
public DrawFrame(){
add(new ArtDesignJPanel());
pack();
}
}
接下来就是继承JPanel绘图了:
public class ArtDesignJPanel extends JPanel{
private Graphics2D g2;
public void paint(Graphics g){
g2 = (Graphics2D) g;
paintFlower();
}
public void paintFlower(){
g2.translate(getWidth()/2, getHeight()/2);
Ellipse2D.Float ellipse = new Ellipse2D.Float(30, 0, 70, 20);
Color color = new Color(0, 255, 0);
g2.setColor(color);
g2.fill(ellipse);
int i = 0;
while(i < 8){
g2.rotate(30);
g2.fill(ellipse);
i ++;
}
ellipse = new Ellipse2D.Float(20, 0, 60, 15);
color = new Color(255, 0, 0);
g2.setColor(color);
g2.fill(ellipse);
i = 0;
while(i < 8){
g2.rotate(30);
g2.fill(ellipse);
i ++;
}
ellipse = new Ellipse2D.Float(10, 0, 50, 10);
color = new Color(0, 0, 255);
g2.setColor(color);
g2.fill(ellipse);
i = 0;
while(i < 8){
g2.rotate(30);
g2.fill(ellipse);
i ++;
}
ellipse = new Ellipse2D.Float(-10, -10, 20, 20);
color = new Color(255, 0, 0);
g2.setColor(color);
g2.fill(ellipse);
}
}
除此之外,对于图案的加减交异或运算:
Area area1 = new Area(ellipse1);
Area area2 = new Area(ellipse2);
加:
area1.add(area2);
减:
area1.subtract(area2);
交:
area1.intersect(area2);
异或:
area1.wxclusiveOr(area2);
g2.draw(area1);