2014-11-24 76 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