可以将侦听器和绘图面板设置为单独的类。为此,我将主类的一个实例传递给侦听器类和绘图类 import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.a

可以将侦听器和绘图面板设置为单独的类。为此,我将主类的一个实例传递给侦听器类和绘图类 import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.a,java,swing,animation,jpanel,paintcomponent,Java,Swing,Animation,Jpanel,Paintcomponent,可以将侦听器和绘图面板设置为单独的类。为此,我将主类的一个实例传递给侦听器类和绘图类 import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPa

可以将侦听器和绘图面板设置为单独的类。为此,我将主类的一个实例传递给侦听器类和绘图类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputAdapter;

public class DrawingTest implements Runnable {

    private JFrame frame;

    private MyDrawPanel drawPanel;

    private List<Point> points;

    public DrawingTest() {
        points = new ArrayList<Point>();
    }

    @Override
    public void run() {
        frame = new JFrame("Bouncing Vertices");

        drawPanel = new MyDrawPanel(this);
        MyListener alpha = new MyListener(this);
        drawPanel.addMouseMotionListener(alpha);
        drawPanel.addMouseListener(alpha);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(drawPanel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public JPanel getDrawingPanel() {
        return drawPanel;
    }

    public List<Point> getPoints() {
        return points;
    }

    public void setPoint(int x, int y) {
        points.add(new Point(x, y));
    }

    public void resetPoints() {
        points.clear();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DrawingTest());
    }

    private class MyListener extends MouseInputAdapter {

        private DrawingTest drawingTest;

        public MyListener(DrawingTest drawingTest) {
            this.drawingTest = drawingTest;
        }

        @Override
        public void mouseDragged(MouseEvent event) {
           drawingTest.setPoint(event.getX(), event.getY());
           drawingTest.getDrawingPanel().repaint();
        }

        @Override
        public void mouseReleased(MouseEvent event) {
            drawingTest.resetPoints();
        }

    }

}

class MyDrawPanel extends JPanel {

    private DrawingTest drawingTest;

    public MyDrawPanel(DrawingTest drawingTest) {
        this.drawingTest = drawingTest;
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        g.setColor(Color.BLUE);
        for (int i = 1; i < drawingTest.getPoints().size(); i++) {
            Point p1 = drawingTest.getPoints().get(i - 1);
            Point p2 = drawingTest.getPoints().get(i);
            g.drawLine(p1.x, p1.y, p2.x, p2.y);
        }
    }
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Point;
导入java.awt.event.MouseEvent;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.event.MouseInputAdapter;
公共类DrawingTest实现可运行{
私有JFrame;
私人MyDrawPanel drawPanel;
私人名单点;
公共绘图测试(){
points=新的ArrayList();
}
@凌驾
公开募捐{
frame=新JFrame(“反弹顶点”);
drawPanel=新的MyDrawPanel(此);
MyListener alpha=新的MyListener(此);
drawPanel.addMouseMotionListener(alpha);
drawPanel.addMouseListener(α);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(drawPanel);
框架设置尺寸(800600);
frame.setVisible(true);
}
公共JPanel getDrawingPanel(){
返回面板;
}
公共列表getPoints(){
返回点;
}
公共无效设定点(整数x,整数y){
点。添加(新点(x,y));
}
公共无效重置点(){
点。清除();
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(newDrawingTest());
}
私有类MyListener扩展了MouseInputAdapter{
私人绘图测试绘图测试;
公共MyListener(DrawingTest DrawingTest){
this.drawingTest=drawingTest;
}
@凌驾
公共无效鼠标标记(鼠标事件){
drawingTest.setPoint(event.getX(),event.getY());
drawingTest.getDrawingPanel().repaint();
}
@凌驾
公共无效MouseEvent事件(MouseEvent事件){
drawingTest.resetPoints();
}
}
}
类MyDrawPanel扩展了JPanel{
私人绘图测试绘图测试;
公共MyDrawPanel(DrawingTest DrawingTest){
this.drawingTest=drawingTest;
}
@凌驾
公共组件(图形g){
g、 setColor(Color.WHITE);
g、 fillRect(0,0,this.getWidth(),this.getHeight());
g、 setColor(Color.BLUE);
对于(int i=1;i
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputAdapter;

public class DrawingTest implements Runnable {

    private JFrame frame;

    private MyDrawPanel drawPanel;

    private List<Point> points;

    public DrawingTest() {
        points = new ArrayList<Point>();
    }

    @Override
    public void run() {
        frame = new JFrame("Bouncing Vertices");

        drawPanel = new MyDrawPanel(this);
        MyListener alpha = new MyListener(this);
        drawPanel.addMouseMotionListener(alpha);
        drawPanel.addMouseListener(alpha);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(drawPanel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public JPanel getDrawingPanel() {
        return drawPanel;
    }

    public List<Point> getPoints() {
        return points;
    }

    public void setPoint(int x, int y) {
        points.add(new Point(x, y));
    }

    public void resetPoints() {
        points.clear();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DrawingTest());
    }

    private class MyListener extends MouseInputAdapter {

        private DrawingTest drawingTest;

        public MyListener(DrawingTest drawingTest) {
            this.drawingTest = drawingTest;
        }

        @Override
        public void mouseDragged(MouseEvent event) {
           drawingTest.setPoint(event.getX(), event.getY());
           drawingTest.getDrawingPanel().repaint();
        }

        @Override
        public void mouseReleased(MouseEvent event) {
            drawingTest.resetPoints();
        }

    }

}

class MyDrawPanel extends JPanel {

    private DrawingTest drawingTest;

    public MyDrawPanel(DrawingTest drawingTest) {
        this.drawingTest = drawingTest;
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        g.setColor(Color.BLUE);
        for (int i = 1; i < drawingTest.getPoints().size(); i++) {
            Point p1 = drawingTest.getPoints().get(i - 1);
            Point p2 = drawingTest.getPoints().get(i);
            g.drawLine(p1.x, p1.y, p2.x, p2.y);
        }
    }
}