⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 panel1.java

📁 Java灵感编程1-101之61-80
💻 JAVA
字号:
package controlarc;import java.awt.*;import javax.swing.JPanel;import java.awt.event.*;import java.awt.geom.*;import java.util.*;/** * <p>Title: Control Arc Demo</p> * <p>Description: This is a Control Arc demo</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: d6-125</p> * @author Liujun * @version 1.0 */public class Panel1 extends JPanel {  BorderLayout borderLayout1 = new BorderLayout();    //在此添加自己的变量    int n = 4;//一个弧角度有四个控制点    int current = -1;//当前的控制点    static   double SIZE = 12.0;//控制点大小    Point2D []   points = new Point2D[4];//四个控制点  public Panel1() {    try {      jbInit();    }    catch(Exception ex) {      ex.printStackTrace();    }  }  void jbInit() throws Exception {    this.setForeground(Color.red);    this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {      public void mouseDragged(MouseEvent e) {        this_mouseDragged(e);      }    });    this.addMouseListener(new java.awt.event.MouseAdapter() {      public void mousePressed(MouseEvent e) {        this_mousePressed(e);      }      public void mouseReleased(MouseEvent e) {        this_mouseReleased(e);      }    });    this.setLayout(borderLayout1);           //add code here         //产生四个初始的点,两个用于控制大小,另外两个用于控制角度         points[0] = new Point2D.Double(100.0, 100.0);         points[1] = new Point2D.Double(200.0, 200.0);         points[2] = new Point2D.Double(150.0, 250.0);         points[3] = new Point2D.Double(250.0, 150.0);  }  void this_mousePressed(MouseEvent e) {    Point p = e.getPoint();      for (int i = 0; i < n; i++)      {  double x = points[i].getX() - SIZE / 2;         double y = points[i].getY() - SIZE / 2;         Rectangle2D r = new Rectangle2D.Double(x, y, SIZE, SIZE);         if (r.contains(p))//判断当前鼠标位置是否在控制点上         {  current = i;//如果是,则设current为当前点            return;         }      }  }  void this_mouseReleased(MouseEvent e) {   current = -1;//鼠标被释放  }  void this_mouseDragged(MouseEvent e) {     if (current == -1) return;//如果鼠标没有按下,则返回      points[current] = e.getPoint();//设置当前点为鼠标的位置      this.repaint();//重绘图形  }  protected void paintComponent(Graphics g) {    /**@todo: Override this javax.swing.JComponent method*/      super.paintComponent( g);      if (points == null) return;      Graphics2D g2 = (Graphics2D)g;//使用Java 2D      for (int i = 0; i < n; i++)//画控制点      {  double x = points[i].getX() - SIZE / 2;         double y = points[i].getY() - SIZE / 2;         g2.fill(new Rectangle2D.Double(x, y, SIZE, SIZE));      }      //重画弧角度      //计算中心位置      double centerX = (points[0].getX() + points[1].getX()) / 2;      double centerY = (points[0].getY() + points[1].getY()) / 2;      //计算高度和宽度      double width = Math.abs(points[1].getX() - points[0].getX());      double height = Math.abs(points[1].getY() - points[0].getY());       //计算起始角度      double distortedStartAngle         = Math.toDegrees(Math.atan2(-(points[2].getY() - centerY)            * width, (points[2].getX() - centerX) * height));      //计算结束角度      double distortedEndAngle         = Math.toDegrees(Math.atan2(-(points[3].getY() - centerY)            * width, (points[3].getX() - centerX) * height));      //计算角度差,纠正角度偏差      double distortedAngleDifference         = distortedEndAngle - distortedStartAngle;      if (distortedStartAngle < 0)         distortedStartAngle += 360;      if (distortedAngleDifference < 0)         distortedAngleDifference += 360;      //创建弧对象      Arc2D Arc = new Arc2D.Double(0, 0, 0, 0,         distortedStartAngle, distortedAngleDifference,         Arc2D.OPEN);      Arc.setFrameFromDiagonal(points[0], points[1]);      //创建两边控制线和角度控制线      GeneralPath gPath = new GeneralPath();      gPath.append(Arc, false);      Rectangle2D Rectangle = new Rectangle2D.Double();      Rectangle.setFrameFromDiagonal(points[0], points[1]);      gPath.append(Rectangle, false);      Point2D center = new Point2D.Double(centerX, centerY);      gPath.append(new Line2D.Double(center, points[2]), false);      gPath.append(new Line2D.Double(center, points[3]), false);      g2.draw(gPath);      g2.drawString("中心点:"+String.valueOf(center)+"  角度差:"+String.valueOf(distortedAngleDifference),10,10);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -