我能够帮助您进行翻译,以下是内容:
然而,我似乎无法在拖动鼠标时重绘它,只有在释放后(线条绘制正确)才能重绘。奇怪的是,在我的拖动过程中,如果我右键单击,线条将突然开始随着我的拖动而绘制。
任何帮助都将不胜感激。
编辑:为了清晰起见,StartLine() / AddLineSegment() / EndLine() 只是将点添加到Point对象的ArrayList中,并且repaint()函数已被覆盖以循环遍历这些点并在每个点之间绘制线段。以下是代码:
我在拖动鼠标时无法使自定义面板重新绘制。
基本上,我正在一个自定义面板上绘制自由形式的线条,并在其上添加以下处理程序:
MouseInputAdapter mia = new MouseInputAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if(_app_split_right_buttons_radioInkBtn.isSelected()) {
_app_split_right_journal.StartLine();
_app_split_right_journal.AddLineSegment(e.getX(), e.getY());
}
_app_split_right_journal.repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
if(_app_split_right_buttons_radioInkBtn.isSelected()) {
_app_split_right_journal.AddLineSegment(e.getX(), e.getY());
_app_split_right_journal.EndLine();
}
_app_split_right_journal.repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
if(_app_split_right_buttons_radioInkBtn.isSelected()) {
_app_split_right_journal.AddLineSegment(e.getX(), e.getY());
}
_app_split_right_journal.repaint();
}
};
_app_split_right_journal.addMouseListener(mia);
_app_split_right_journal.addMouseMotionListener(mia);
然而,我似乎无法在拖动鼠标时重绘它,只有在释放后(线条绘制正确)才能重绘。奇怪的是,在我的拖动过程中,如果我右键单击,线条将突然开始随着我的拖动而绘制。
任何帮助都将不胜感激。
编辑:为了清晰起见,StartLine() / AddLineSegment() / EndLine() 只是将点添加到Point对象的ArrayList中,并且repaint()函数已被覆盖以循环遍历这些点并在每个点之间绘制线段。以下是代码:
public void DrawShapes(Graphics g) {
g.setColor(Color.black);
for(Geometry.Shape shape : _shapeList) {
if(shape instanceof Geometry.Line) {
ArrayList<Point> points = ((Line) shape).GetPointList();
Point p1 = points.get(0);
for(int i=1; i<points.size(); i++) {
Point p = points.get(i);
g.drawLine(p1.x, p1.y, p.x, p.y);
p1 = p;
}
}
}
编辑:问题已解决。原因是我在遍历行列表时忘记了,直到释放鼠标并调用EndLine()之前,我不会将当前正在绘制的线添加到该列表中。我必须在repaint()方法中添加单独的代码来绘制我当前正在绘制的形状。代码已添加到repaint()中:
if(_currentShape instanceof Geometry.Line) {
ArrayList<Point> points = ((Line)_currentShape).GetPointList();
Point p1 = points.get(0);
for(int i=1; i<points.size(); i++) {
Point p = points.get(i);
g.drawLine(p1.x, p1.y, p.x, p.y);
p1 = p;
}
}