【发布时间】:2018-05-11 08:51:22
【问题描述】:
我已经创建了自己的扩展 JPanel,让用户能够在上面签名,然后保存签名并从面板中删除:
public class PanelParaFirmar extends JPanel
{
private MouseHandler mouseHandler = new MouseHandler();
private int index = 0;
private Point[] arr = new Point[100000];
public PanelParaFirmar()
{
this.setBackground(Color.WHITE);
this.addMouseListener(mouseHandler);
this.addMouseMotionListener(mouseHandler);
}
protected void paintComponent(Graphics g)
{
this.paintComponents(g);
for (int i = 0; i < index - 1; i++)
g.drawLine(arr[i].x, arr[i].y, arr[i + 1].x, arr[i + 1].y);
}
private class MouseHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
arr[index] = new Point(e.getX(), e.getY());
index++;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
arr = new Point[100000];
index = 0;
}
@Override
public void mouseDragged(MouseEvent e) {
//updateUI();
//save();
arr[index] = new Point(e.getX(), e.getY());
index++;
repaint();
}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
}
};
我怎样才能只画线?
【问题讨论】:
-
尝试调用
super.paintComponent(g)而不是this.paintComponents(g)(注意,在paintComponent 中没有s)。 -
谢谢,但是现在,当我释放鼠标按钮时,它会在下一个签名中创建一个新行,有些签名不止一行。以及如何删除所有行?
-
你是说你接受多行签名?
-
是的,有时签名需要先写一行,然后“举笔”再写第二行
-
因此,您确定签名结束的事件不应该是鼠标释放,而是类似于给定按钮上的操作(例如,在您的 GUARDAR 按钮上) ) .