📄 mygraphics200804161414(wancheng).java
字号:
//简单的绘图程序,在Eclipse3.1上编译通过,可以绘制直线,圆,矩形和分形树
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyGraphics extends JFrame{
private thePanel myPanel ;
private JPanel panel;
private JLabel lable;
String[] theStatus={"直线","圆_由中心","圆_由边界点","矩形_由中心","矩形_由顶点","分形树"};
private CheckboxGroup checkg;
private Checkbox check1,check2,check3,check4,check5,check6;
public MyGraphics(){
super("java绘图程序");
myPanel = new thePanel();
panel= new JPanel();
lable= new JLabel();
panel.setLayout(new FlowLayout());
check1 = new Checkbox("直线");
check2 = new Checkbox("圆_由中心");
check3 = new Checkbox("圆_由边界点");
check4 = new Checkbox("矩形_由中心");
check5 = new Checkbox("矩形_由顶点");
check6 = new Checkbox("分形树(速度稍慢)");
checkg = new CheckboxGroup();
check1.setCheckboxGroup(checkg);
check2.setCheckboxGroup(checkg);
check3.setCheckboxGroup(checkg);
check4.setCheckboxGroup(checkg);
check5.setCheckboxGroup(checkg);
check6.setCheckboxGroup(checkg);
checkg.setSelectedCheckbox(check1);
panel.add(check1);
panel.add(check2);
panel.add(check3);
panel.add(check4);
panel.add(check5);
panel.add(check6);
Container container=getContentPane();
container.setLayout(new BorderLayout());
container.add(myPanel,BorderLayout.CENTER);
container.add(panel,BorderLayout.NORTH);
container.add(lable,BorderLayout.SOUTH);
myPanel.addMouseMotionListener(new MouseMotionListener()
{
public void mouseDragged(MouseEvent event)
{
lable.setText(theStatus[myPanel.getStar()-1]+" Form "+myPanel.getX1()+","+myPanel.getY1()+" to "+ event.getX()+","+event.getY());
}
public void mouseMoved(MouseEvent event)
{
lable.setText(theStatus[myPanel.getStar()-1]+" Position:"+ event.getX()+","+event.getY());
}
});
check1.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(1);
}
});
check2.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(2);
}
});
check3.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(3);
}
});
check4.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(4);
}
});
check5.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(5);
}
});
check6.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
myPanel.setStar(6);
}
});
try
{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch(Exception e){}
setSize(700,500);
setResizable(true);
setVisible(true);
}
public static void main (String[] args){
MyGraphics theGraphics = new MyGraphics();
theGraphics.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class thePanel extends JPanel{
private int x1,x2,y1,y2;
public int star;
final double PI=Math.PI/180;
public thePanel(){
this.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent event)
{
x1=event.getX();
y1=event.getY();
}
public void mouseReleased(MouseEvent event)
{
x2=event.getX();
y2=event.getY();
repaint();
}
}
);
this.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent event)
{
x2=event.getX();
y2=event.getY();
repaint();
}
});
star=1;
}
public void setStar(int i){
star = i;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
switch(star){
case 1 :
g.setColor(Color.BLACK);
this.drawLine(x1,y1,x2,y2,g);
break;
case 2 :
g.setColor(Color.red);
this.drawCircle(x1,y1,x2,y2,g);
break;
case 3 :
g.setColor(Color.red);
this.drawCircle_1(x1,y1,x2,y2,g);
break;
case 4 :
g.setColor(Color.BLUE);
this.drawCuboid_1(x1,y1,x2,y2,g);
break;
case 5 :
g.setColor(Color.BLUE);
this.drawCuboid(x1,y1,x2,y2,g);
break;
case 6 :
g.setColor(new Color(67,156,53));
this.drawLeaf(300.0,500.0,100.0,270.0, g);
break;
}
}
public int getX1(){
return x1;
}
public int getY1(){
return y1;
}
public int getStar(){
return star;
}
private void drawPoint(int x,int y,Graphics g){
g.drawLine(x,y,x,y);
}
private void drawLine(int x1,int y1,int x2,int y2,Graphics g)
{
int dx,dy,d,UpIncre,DownIncre,x,y;
float k;
if(x1>x2)
{
x=x2;x2=x1;x1=x;
y=y2;y2=y1;y1=y;
}
else
{
x=x1;y=y1;
}
dx=x2-x1;dy=y2-y1;
if(dx==0)
{
for(y=Math.min(y1,y2);y<=Math.max(y1,y2);y++)
this.drawPoint(x,y,g);
return;
}
k=(float)dy/(float)dx;
if(k>=0)
{
if(k<=1)
{
d=dx-2*dy;
UpIncre=2*dx-2*dy;DownIncre=-2*dy;
while(x<=x2)
{
this.drawPoint(x,y,g);
x++;
if(d<0)
{
y++;
d+=UpIncre;
}
else d+=DownIncre;
}
}
else
{
d=2*dx-dy;
DownIncre=2*dx;UpIncre=2*dx-2*dy;
while(y<=y2)
{
this.drawPoint(x,y,g);
y++;
if(d>0)
{
x++;
d+=UpIncre;
}
else d+=DownIncre;
}
}
}
else
{
if(k>=-1)
{
d=-dx-2*dy;
UpIncre=-2*dx-2*dy;DownIncre=-2*dy;
while(x<=x2)
{
this.drawPoint(x,y,g);
x++;
if(d>0)
{
y--;
d+=UpIncre;
}
else d+=DownIncre;
}
}
else
{
d=-2*dx-dy;
UpIncre=-2*dx-2*dy;DownIncre=-2*dx;
while(y>=y2)
{
this.drawPoint(x,y,g);
y--;
if(d<0)
{
x++;
d+=UpIncre;
}
else d+=DownIncre;
}
}
}
}
private void drawCircle(int x1,int y1,int x2,int y2,Graphics g)
{
int x,y,d,r;
r=(int)Math.sqrt((double)(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
x=0;y=r;d=1-r;
while(x<=y)
{
this.drawPoint(x1+x,y1+y,g);
this.drawPoint(x1+x,y1-y,g);
this.drawPoint(x1-x,y1+y,g);
this.drawPoint(x1-x,y1-y,g);
this.drawPoint(x1+y,y1+x,g);
this.drawPoint(x1+y,y1-x,g);
this.drawPoint(x1-y,y1+x,g);
this.drawPoint(x1-y,y1-x,g);
if(d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
}
}
public void drawLeaf(double x,double y,double L,double a,Graphics g){
double x1,x2,x1L,x2L,x1R,x2R;
double y1,y2,y1L,y2L,y1R,y2R;
float B = 50;
float C = 9;
float s1 = 2;
float s2 = 3;
float s3 = 1.2f;
if(L>s1){
x2 = x+L*Math.cos (a*PI);
y2 = y+L*Math.sin (a*PI);
x2R = x2+L/s2*Math.cos((a+B)*PI);
y2R = y2+L/s2*Math.sin((a+B)*PI);
x2L = x2+L/s2*Math.cos((a-B)*PI);
y2L = y2+L/s2*Math.sin((a-B)*PI);
x1 = x+L*Math.cos (a*PI);
y1 = y+L*Math.sin (a*PI);
x1R = x1+L/s2*Math.cos((a-B)*PI);
y1R = y1+L/s2*Math.sin((a-B)*PI);
x1L = x1+L/s2*Math.cos((a+B)*PI);
y1L = y1+L/s2*Math.sin((a+B)*PI);
g.drawLine((int) x, (int) y,(int) x2,(int) y2);
g.drawLine((int) x2,(int) y2,(int) x2R,(int) y2R);
g.drawLine((int) x2,(int) y2,(int) x2L,(int) y2L);
g.drawLine((int) x1,(int) y1,(int) x1L,(int) y1L);
g.drawLine((int) x1,(int) y1,(int) x1R,(int) y1R);
drawLeaf(x2,y2,L/s3,a+C,g);
drawLeaf(x2R,y2R,L/s2,a+B,g);
drawLeaf(x2L,y2L,L/s2,a-B,g);
drawLeaf(x1L,y1L,L/s2,a-B,g);
drawLeaf(x1R,y1R,L/s2,a+B,g);
}
}
public void drawCuboid(int x1,int y1,int x2,int y2,Graphics g){
this.drawLine(x1,y1,x2,y1,g);
this.drawLine(x1,y1,x1,y2,g);
this.drawLine(x2,y1,x2,y2,g);
this.drawLine(x1,y2,x2,y2,g);
}
public void drawCircle_1(int x1,int y1,int x2,int y2,Graphics g){
this.drawCircle((x1+x2)/2,(y1+y2)/2,x2,y2,g);
}
public void drawCuboid_1(int x1,int y1,int x2,int y2,Graphics g){
this.drawCuboid(2*x1-x2,2*y1-y2,x2,y2,g);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -