62,620
社区成员
发帖
与我相关
我的任务
分享
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ApplicationFrame extends Frame{
/**
*
*/
private static final long serialVersionUID = 5615364649875351782L;
public ApplicationFrame() {
this("ApplicationFrame v1.0");
}
public ApplicationFrame(String title) {
super(title);
createUI();
}
protected void createUI() {
setSize(500, 400);
center();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public void center() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
int x = (screenSize.width - frameSize.width) / 2;
int y = (screenSize.height - frameSize.height) / 2;
setLocation(x, y);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.QuadCurve2D;
import java.awt.geom.Rectangle2D;
public class DragKing extends ApplicationFrame implements MouseListener, MouseMotionListener{
/**
*
*/
private static final long serialVersionUID = -3997715010627598331L;
protected Point2D[] mPoints;
protected Point2D mSelectedPoint;
public static void main(String[] args) {
new DragKing();
}
public DragKing() {
super("DragKing v1.0");
setSize(300, 300);
center();
mPoints = new Point2D[9];
//Cubic curve
mPoints[0] = new Point2D.Double(50, 75);
mPoints[1] = new Point2D.Double(100, 100);
mPoints[2] = new Point2D.Double(200, 50);
mPoints[3] = new Point2D.Double(250, 75);
//Quad curve
mPoints[4] = new Point2D.Double(50, 175);
mPoints[5] = new Point2D.Double(150, 150);
mPoints[6] = new Point2D.Double(250, 175);
//Line
mPoints[7] = new Point2D.Double(50, 275);
mPoints[8] = new Point2D.Double(250, 275);
mSelectedPoint = null;
addMouseListener(this);
addMouseMotionListener(this);
setVisible(true);
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//Draw the tangents
Line2D tangent1 = new Line2D.Double(mPoints[0], mPoints[1]);
Line2D tangent2 = new Line2D.Double(mPoints[2], mPoints[3]);
g2.setPaint(Color.gray);
g2.draw(tangent1);
g2.draw(tangent2);
//Draw the cubic curve
CubicCurve2D c = new CubicCurve2D.Float();
c.setCurve(mPoints, 0);
g2.setPaint(Color.black);
g2.draw(c);
//Draw the tangents
tangent1 = new Line2D.Double(mPoints[4], mPoints[5]);
tangent2 = new Line2D.Double(mPoints[5], mPoints[6]);
g2.setPaint(Color.gray);
g2.draw(tangent1);
g2.draw(tangent2);
//Draw the quadratic curve
QuadCurve2D q = new QuadCurve2D.Float();
q.setCurve(mPoints, 4);
g2.setPaint(Color.black);
g2.draw(q);
//Draw the line
Line2D l = new Line2D.Double();
l.setLine(mPoints[7], mPoints[8]);
g2.setPaint(Color.black);
g2.draw(l);
for(int i=0; i<mPoints.length; i++) {
if(mPoints[i] == mSelectedPoint) {
g2.setPaint(Color.red);
}else {
g2.setPaint(Color.blue);
}
g2.fill(getControlPoint(mPoints[i]));
}
}
protected Shape getControlPoint(Point2D p) {
int side = 4;
return new Rectangle2D.Double(p.getX() - side / 2, p.getY() -side / 2, side, side);
}
public void mouseDragged(MouseEvent e) {
if(null != mSelectedPoint) {
mSelectedPoint.setLocation(e.getPoint());
repaint();
}
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
mSelectedPoint = null;
for(int i=0; i<mPoints.length; i++) {
Shape s = getControlPoint(mPoints[i]);
if(s.contains(e.getPoint())) {
mSelectedPoint = mPoints[i];
break;
}
}
repaint();
}
public void mouseReleased(MouseEvent e) {
}
}