📄 panel1.java~7~
字号:
package controlpolygon;import java.awt.*;import javax.swing.JPanel;import java.awt.geom.*;import java.util.*;import java.awt.event.*;/** * <p>Title: ControlPolygonDemo</p> * <p>Description: This is a Control Polygon 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 = 5;//一个多边形有五个控制点 int current = -1;//当前的控制点 static double SIZE = 12.0;//控制点大小 Point2D [] points = new Point2D[5];//五个控制点 public Panel1() { try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { 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(100.0, 150.0); points[2] = new Point2D.Double(130.0, 170.0); points[3] = new Point2D.Double(250.0, 260.0); points[4] = new Point2D.Double(300.0, 200.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)); } //重画多边形 GeneralPath Polygon = new GeneralPath(); Polygon.moveTo((float)points[0].getX(), (float)points[0].getY()); for (int i = 1; i < n; i++) Polygon.lineTo((float)points[i].getX(), (float)points[i].getY()); Polygon.closePath(); g2.draw(Polygon); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -