【发布时间】:2019-12-05 07:10:36
【问题描述】:
我正在尝试做橡皮筋,让我再解释一下,每次我画一条线并画另一条线时,它都会清除面板并且永远不会显示第一个绘制的线,我想保存所有绘制的线使用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){}
}
}
【问题讨论】:
-
您的意思类似于this for example。关于绘画(通常),您需要了解的一件事是它具有破坏性,因此您需要确保在调用
paintComponent时,您可以完全重建您想要绘画的内容 -
所以根据您的代码,您应该遍历单个
List点,在它们之间画一条线 -
我想使用 ArrayList one 作为第一个点,第二个作为第二个点。 - 那么你需要实际使用
get(...)方法来获取每个点ArrayList 在您尝试在两点之间画一条线之前。