在画布上用鼠标画线:Java awt
发布时间:2020-12-15 00:02:34 所属栏目:Java 来源:网络整理
导读:尝试是在awt画布上用鼠标绘制图形(现在是一条线).我第一次尝试 java图形.所以不确定如何去做.这是我的第一次尝试: package def.grafi;import java.awt.Canvas;import java.awt.Frame;import java.awt.Graphics;import java.awt.event.MouseAdapter;import j
尝试是在awt画布上用鼠标绘制图形(现在是一条线).我第一次尝试
java图形.所以不确定如何去做.这是我的第一次尝试:
package def.grafi; import java.awt.Canvas; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Dra { Frame f = new Frame(); public void disp() { f.setBounds(100,100,200,200); MosL ml = new MosL(); Can c = new Can(); f.add(c); c.addMouseListener(ml); c.addMouseMotionListener(ml); f.setVisible(true); } public static void main(String[] args) { Dra d = new Dra(); d.disp(); } public class MosL extends MouseAdapter { int sx = 0; int sy = 0; boolean onDrag = false; @Override public void mouseDragged(MouseEvent e) { if (onDrag) { int x = e.getX(); int y = e.getY(); Canvas comp = (Canvas) e.getSource(); Graphics g = comp.getGraphics(); // comp.repaint(); << for cleaning up the intermediate lines : doesnt work :( g.drawLine(sx,sy,x,y); return; } onDrag = true; sx = e.getX(); sy = e.getY(); System.out.println("Draggg"); } @Override public void mousePressed(MouseEvent e) { System.out.println("Pressed"); } @Override public void mouseReleased(MouseEvent e) { System.out.println("Released"); if (onDrag) onDrag = false; } } public class Can extends Canvas { @Override public void paint(Graphics g) { } } } 问题 : 有人可以帮我解决这些问题吗? 解决方法
这是一个这种“绘画”的简单例子:
public static void main ( String[] args ) { JFrame paint = new JFrame (); paint.add ( new JComponent () { private List<Shape> shapes = new ArrayList<Shape> (); private Shape currentShape = null; { MouseAdapter mouseAdapter = new MouseAdapter () { public void mousePressed ( MouseEvent e ) { currentShape = new Line2D.Double ( e.getPoint (),e.getPoint () ); shapes.add ( currentShape ); repaint (); } public void mouseDragged ( MouseEvent e ) { Line2D shape = ( Line2D ) currentShape; shape.setLine ( shape.getP1 (),e.getPoint () ); repaint (); } public void mouseReleased ( MouseEvent e ) { currentShape = null; repaint (); } }; addMouseListener ( mouseAdapter ); addMouseMotionListener ( mouseAdapter ); } protected void paintComponent ( Graphics g ) { Graphics2D g2d = ( Graphics2D ) g; g2d.setPaint ( Color.BLACK ); for ( Shape shape : shapes ) { g2d.draw ( shape ); } } } ); paint.setSize ( 500,500 ); paint.setLocationRelativeTo ( null ); paint.setVisible ( true ); } 它会记住所有绘制的形状,只需很小的努力就可以扩展它以绘制你喜欢的任何其他形状. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |