首页 > 解决方案 > 不使用 Lines2D 的橡皮筋

问题描述

我正在尝试做橡皮筋,让我再解释一下,每次我画一条线并画另一条线时,它都会清除面板并且从不显示第一个绘制的线,我想保存所有绘制的线而不使用Lines2D我想要的使用ArrayList一个为first点,第二个为second点。

这是我的代码:

package rubberlines;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class RubberLinesPanel extends JPanel {
    private Point point1 = null, point2 = null;
    private ArrayList<Point> pt1 = new ArrayList<Point>();
    private ArrayList<Point> pt2 = new ArrayList<Point>();
//    private ArrayList<Point> pt3 = new ArrayList<Point>();


    RubberLinesPanel(){
        LineListener listener = new LineListener();
        addMouseListener(listener);
        addMouseMotionListener(listener);
        setBackground(Color.black);
    }

    public void paintComponent(Graphics page){
        super.paintComponent(page);
        page.setColor(Color.green);
        for(int i=0; i<pt1.size(); i++){
        if(point1 != null && point2 != null){
            page.drawLine(point1.x, point1.y, point2.x, point2.y);
        }
        }
    }

    private class LineListener implements MouseListener, MouseMotionListener{
        public void mousePressed(MouseEvent event){
            point1 = event.getPoint();
            pt1.add(point1);
        }

        public void mouseDragged(MouseEvent event){
//            point2 = event.getPoint();
//            repaint();
        }

    public void mouseClicked(MouseEvent event){}
    public void mouseReleased(MouseEvent event){
        point2 = event.getPoint();
        pt2.add(point2);
        repaint();
//            for(int i=0; i<pt2.size(); i++){
//            pt2.get(i);
//            }            
        }
    public void mouseEntered(MouseEvent event){}
    public void mouseExited(MouseEvent event){}
    public void mouseMoved(MouseEvent event){}

    }

}

标签: javaswingarraylist

解决方案


我想将 ArrayList 用于第一点,将第二点用于第二点。

那么get(...)在你尝试在两点之间画一条线之前,你需要实际使用该方法从 ArrayList 中获取每个点。

就像是:

for(int i = 0; i < pt1.size(); i++)
{
    Point point1 = pt1.get(i);
    Point point2 = pt2.get(i);

    if(point1 != null && point2 != null)
    {
        page.drawLine(point1.x, point1.y, point2.x, point2.y);
    }
}

推荐阅读