?? 例9.3-9.7改進(jìn).java
字號(hào):
//Example 9.3-9.7
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
class MyLocation
{
int x,y;
public MyLocation(){x=0;y=0;}
public MyLocation(int i1,int i2){x=i1;y=i2;}
public int get_x(){ return x; }
public int get_y(){ return y; }
}
class MyPoint extends MyLocation
{
boolean visible=false;
Color c=Color.black;
public MyPoint(){ super(); }
public MyPoint(int x,int y){ super(x,y); }
public void show(){ visible=true; }
public void hide(){ visible=false; }
public boolean is_visible(){ return visible; }
public void set_color(Color cc){ c=cc; }
public Color get_color(){ return c; }
public void move_to(int endX,int endY){x=endX;y=endY; }
}
class MyCircle extends MyPoint
{
int radius;
public MyCircle(){super();radius=0; }
public MyCircle(int xx,int yy,int r){super(xx,yy);radius=r;}
public int get_r(){ return radius; }
public void expand(int delta)
{
hide();radius=radius+delta;
if(radius<0)radius=0;
show();
}
public void contract(int delta){ expand(-delta); }
}
class MyCanvas extends Component
{
final int MaxPoint=50;
final int MaxCircle=50;
private int nCurrentPoint=0,nCurrentCircle=0;
MyPoint[] pointTable=new MyPoint[MaxPoint];
MyCircle[] circleTable=new MyCircle[MaxCircle];
public MyCanvas(){ super();nCurrentPoint=0;nCurrentCircle=0;}
public void addPoint(MyPoint pt)
{
pointTable[nCurrentPoint]=pt;nCurrentPoint++;
}
public void addCircle(MyCircle cl)
{
circleTable[nCurrentCircle]=cl;nCurrentCircle++;
}
public void paint(Graphics g)
{
int i,x,y,r;
for(i=0;i<nCurrentPoint;i++)
{
if(pointTable[i].is_visible())
{
g.setColor(pointTable[i].get_color());
x=pointTable[i].get_x();y=pointTable[i].get_y();
g.drawLine(x,y,x,y);
}
}
for(i=0;i<nCurrentCircle;i++)
{
if(circleTable[i].is_visible())
{
g.setColor(circleTable[i].get_color());
x=circleTable[i].get_x();y=circleTable[i].get_y();
r=circleTable[i].get_r();
x=x-r;y=y-r;r=2*r;
g.drawOval(x,y,r,r);
}
}
}
}
class tt implements WindowListener,MouseListener,MouseMotionListener
{
static MyCanvas mc;
int X,Y,R;
boolean dragging=false;
public static void main(String args[])
{
Frame f=new Frame("My Canvas");
mc=new MyCanvas();
tt t=new tt();
mc.addMouseListener(t);mc.addMouseMotionListener(t);
String sStr="";
f.add("Center",mc);f.addWindowListener(t);
f.setSize(300,300);f.setVisible(true);
MyPoint p1=new MyPoint(100,100);
MyCircle c1=new MyCircle(100,100,30);
mc.addPoint(p1);mc.addCircle(c1);
p1.show();c1.show();
mc.repaint();
try
{
InputStreamReader ir=new InputStreamReader(System.in);
LineNumberReader inReader=new LineNumberReader(ir);
System.out.println("Please Input ENTER 3 times");
sStr=inReader.readLine();
c1.set_color(Color.blue);c1.move_to(200,50);
mc.repaint();
sStr=inReader.readLine();
c1.set_color(Color.orange);
c1.expand(30);
mc.repaint();
sStr=inReader.readLine();
c1.set_color(Color.pink);
c1.contract(40);mc.repaint();
}
catch(IOException e)
{
System.out.println("Error");System.exit(0);
}
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowActivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
public void mouseClicked(MouseEvent e)
{
Graphics g=mc.getGraphics();
g.drawOval(e.getX()-10,e.getY()-10,21,21);
}
public void mouseEntered(MouseEvent e){ }
public void mouseExited(MouseEvent e){ }
public void mousePressed(MouseEvent e)
{
X=e.getX();Y=e.getY();
}
public void mouseReleased(MouseEvent e)
{
Graphics g=mc.getGraphics();
if(dragging)
{
g.setXORMode(Color.red);
g.drawOval(X-R,Y-R,2*R+1,2*R+1);
int x1=e.getX(),y1=e.getY(),r=(int)(Math.sqrt((x1-X)*(x1-X)+(y1-Y)*(y1-Y))+0.5);
g.setPaintMode();
g.drawOval(X-r,Y-r,2*r+1,2*r+1);
dragging=false;
}
}
public void mouseDragged(MouseEvent e)
{
Graphics g=mc.getGraphics();
g.setXORMode(Color.red);
if(dragging)
g.drawOval(X-R,Y-R,2*R+1,2*R+1);
else
dragging=true;
int x1=e.getX(),y1=e.getY(),r=(int)(Math.sqrt((x1-X)*(x1-X)+(y1-Y)*(y1-Y))+0.5);
g.drawOval(X-r,Y-r,2*r+1,2*r+1);
R=r;
}
public void mouseMoved(MouseEvent e){ }
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -