Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编写一个程序,用鼠标移动一个圆_Java_Applet_Jframe - Fatal编程技术网

用java编写一个程序,用鼠标移动一个圆

用java编写一个程序,用鼠标移动一个圆,java,applet,jframe,Java,Applet,Jframe,我试着在第一个小程序中编写它,它成功了,但我在画椭圆线之后使用了repaint()方法,它闪烁得太多,我看不见。请帮我修复它 import java.awt.event.*; import java.awt.*; import javax.swing.*; public class MouseEvents extends JFrame implements MouseListener, MouseMotionListener { JFrame frame; public st

我试着在第一个小程序中编写它,它成功了,但我在画椭圆线之后使用了repaint()方法,它闪烁得太多,我看不见。请帮我修复它

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);

}

}
  • 它不是一个小程序,而是一个框架
  • 了解如何在Swing中绘制(即不使用
    getGraphics
    )。有关更多详细信息,请参阅和
  • 首先创建一个从
    JPanel
    扩展的类。为此,注册一个
    mousemotionlistener
    来跟踪当前鼠标位置。覆盖它的
    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);
                }
            });
        }
    
    }
    

    你的程序太棒了,很抱歉我犯了糟糕的编程错误,我是新来的,我想学习代码,而不必去读太多的书。。非常感谢:)这些大书可以帮助你避免犯愚蠢的错误;)