📄 panel1.java
字号:
package drawimage;import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.*;import java.awt.geom.*;/** * <p>Title: Draw Image Demo</p> * <p>Description: This is a Draw Image 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 = 2;//一个图像有两个控制点 int current = -1;//当前的控制点 static double SIZE = 12.0;//控制点大小 Point2D [] points = new Point2D[2];//两个控制点 String FileName=null;//图像文件名称 Image myImage=null;//图像变量 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(10.0, 60.0); points[1] = new Point2D.Double(200.0, 200.0); } void SetFileName(String s){ FileName=s; if(FileName!=null){ myImage = Toolkit.getDefaultToolkit().getImage(FileName); } repaint(); } protected void paintComponent(Graphics g) { /**@todo: Override this javax.swing.JComponent method*/ super.paintComponent( g); if (points == null) return; if(myImage==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)); } //计算高度和宽度 int width = (int)Math.abs(points[1].getX() - points[0].getX()); int height = (int)Math.abs(points[1].getY() - points[0].getY()); g2.drawImage(myImage,(int)points[0].getX(),(int)points[0].getY(), width,height,this);//绘制图像 } 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();//重绘图形 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -