2014-11-24 77 views
-1

我已经尝试在第一个Applet中写它,但它工作,但我用DrawOval线后的repaint()方法,它闪烁太多,我不能看到。请帮我解决它。用java写一个程序,用鼠标做一个圆圈

import java.awt.event.*; 

import java.awt.*; 

import javax.swing.*; 


public class MouseEvents extends JFrame implements MouseListener, MouseMotionListener { 

    JFrame frame; 

    public static void main(String args[]){ 

    MouseEvents obj=new MouseEvents(); 

    obj.go(); 

} 

public void go(){ 

    frame=new JFrame(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.setSize(300,300); 

    frame.setVisible(true); 

    addMouseListener(this); 

    addMouseMotionListener(this); 

} 

public void mouseClicked(MouseEvent me) { 

} 

public void mouseEntered(MouseEvent me) { 

} 

public void mouseExited(MouseEvent me) { 

} 

public void mousePressed(MouseEvent me) { 

} 

public void mouseReleased(MouseEvent me) { 

} 

public void mouseDragged(MouseEvent me) { 

    repaint(); 

} 

public void mouseMoved(MouseEvent me) { 

    Graphics g=getGraphics(); 

    g.drawOval(me.getX(), me.getY(), 30,30); 

} 

} 

回答

0
  1. 这不是一个小程序,它的框架
  2. 了解在Swing绘画是怎么想做(即不使用getGraphics)。有关更多详细信息,请参见Painting in AWT and SwingPerforming Custom Painting

首先创建一个从JPanel延伸的类。为此,请注册MouseMoitionListener以跟踪当前的鼠标位置。覆盖它的paintComponent画的圈,其中鼠标移动...

public class CirclePane extends JPanel { 

    private Point p = new Point(100, 100); 

    public CirclePane() { 
     MouseAdapter mouseHandler = new MouseAdapter() { 

      @Override 
      public void mouseMoved(MouseEvent e) { 
       p = e.getPoint(); 
       repaint(); 
      } 

     }; 
     addMouseMotionListener(mouseHandler); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(200, 200); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g.create(); 
     g2d.drawOval(p.x - 50, p.y - 50, 100, 100); 
     g2d.dispose(); 
    } 

} 

添加到您的框架......

import java.awt.event.*; 
import java.awt.*; 
import javax.swing.*; 

public class MouseEvents { 

    public static void main(String[] args) { 
     new MouseEvents(); 
    } 

    public MouseEvents() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new CirclePane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

你的程序是真棒,对不起,是我不好的编程错误林新和我想要学习代码而不用去读巨大的书籍。非常感谢:) – amber 2014-11-24 08:14:39

+0

巨大的书籍会帮助你做出愚蠢的错误;) – MadProgrammer 2014-11-24 09:13:02