java在移动鼠标时绘制直线
我想在我的应用程序中添加一个功能,允许用户通过在开始位置单击鼠标并在结束位置释放鼠标来绘制一条直线。线应该随着鼠标的移动而移动,直到最终释放;类似于使用Microsoft Paint应用程序绘制直线的方式java在移动鼠标时绘制直线,java,mouseevent,awt,draw,graphics2d,Java,Mouseevent,Awt,Draw,Graphics2d,我想在我的应用程序中添加一个功能,允许用户通过在开始位置单击鼠标并在结束位置释放鼠标来绘制一条直线。线应该随着鼠标的移动而移动,直到最终释放;类似于使用Microsoft Paint应用程序绘制直线的方式 如何实现这一点,使线条在移动时重新绘制,而不重新绘制该矩形区域中可能已绘制的其他内容?MouseStener界面是您的朋友。您可以只实现mousePressed和mouseereleased函数。MouseListener接口有以下方法可供使用: public void mouseEntere
如何实现这一点,使线条在移动时重新绘制,而不重新绘制该矩形区域中可能已绘制的其他内容?MouseStener界面是您的朋友。您可以只实现mousePressed和mouseereleased函数。MouseListener接口有以下方法可供使用:
public void mouseEntered(MouseEvent mouse){ }
public void mouseExited(MouseEvent mouse){ }
public void mousePressed(MouseEvent mouse){ }
public void mouseReleased(MouseEvent mouse){ }
试试这个…移动(拖动)鼠标时在屏幕上画一条红线 这将在移动鼠标时移动线条。。
希望这有帮助。您能使用swing组件吗?如果是这样,不用担心重新绘制,让框架来处理。替代paintComponent方法并绘制一条线。然后你就可以用鼠标监听器来设置起点和终点了,任务完成了。实际上,正如@davidfrancis所说的,只要在鼠标放下时划出一条线,让普通的swing来重新绘制。我将为您附上一个工作示例。我们如何在旧线条仍然存在的情况下绘制多条线条?@raj创建一个新帖子来解决您的问题。
public static void main(String args[]) throws Exception {
JFrame f = new JFrame("Draw a Red Line");
f.setSize(300, 300);
f.setLocation(300, 300);
f.setResizable(false);
JPanel p = new JPanel() {
Point pointStart = null;
Point pointEnd = null;
{
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
pointStart = e.getPoint();
}
public void mouseReleased(MouseEvent e) {
pointStart = null;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
pointEnd = e.getPoint();
}
public void mouseDragged(MouseEvent e) {
pointEnd = e.getPoint();
repaint();
}
});
}
public void paint(Graphics g) {
super.paint(g);
if (pointStart != null) {
g.setColor(Color.RED);
g.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y);
}
}
};
f.add(p);
f.setVisible(true);
}
JFrame frame = new JFrame("Lines");
frame.add(new JComponent() {
private Shape line = null;
{
line = new Line2D.Double(100, 100, 200, 200);
prevPoint = new Point();
newPoint = new Point();
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
prevPoint = e.getPoint();
System.out.println("Prev Point=" + prevPoint.toString());
repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
int dx = 0;
int dy = 0;
dx = (int) (prevPoint.x - e.getPoint().getX());
dy = (int) (prevPoint.y - e.getPoint().getY());
Line2D shape = (Line2D) line;
int x1 = (int) (shape.getX1() - dx);
int y1 = (int) (shape.getY1() - dy);
int x2 = (int) (shape.getX2() - dx);
int y2 = (int) (shape.getY2() - dy);
Point startPoint = new Point(x1, y1);
Point endPoint = new Point(x2, y2);
if (shape != null) {
shape.setLine(startPoint, endPoint);
prevPoint = e.getPoint();
repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
repaint();
}
};
addMouseListener(mouseAdapter);
addMouseMotionListener(mouseAdapter);
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(Color.BLUE);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (line != null) {
g2d.draw(line);
}
}
});
frame.setSize(650, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);